[原创](Modern C++)现代C++的关键性概念: 原始字符串字面变量R“()“和LR“()“

devtools/2025/1/17 3:32:07/

常用网名: 猪头三
出生日期: 1981.XX.XX
企鹅交流: 643439947
个人网站: 80x86汇编小站
编程生涯: 2001年~至今[共23年]
职业生涯: 21年
开发语言: C/C++、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python
开发工具: Visual Studio、Delphi、XCode、Eclipse、C++ Builder
技能种类: 逆向 驱动 磁盘 文件
研发领域: Windows应用软件安全/Windows系统内核安全/Windows系统磁盘数据安全/macOS应用软件安全
项目经历: 磁盘性能优化/文件系统数据恢复/文件信息采集/敏感文件监测跟踪/网络安全检测

[序言]
现代C++(通常指C++11及以后标准)引入了许多新特性和改进, 在这其中, 原始字符串字面量是一项非常实用且经典的功能,它简化了对复杂字符序列的处理. 传统的C++字符串字面量中, 如果要表示包含反斜线\或者双引号"等特殊字符的文本内容, 需要进行转义, 导致在编写文件路径、正则表达式以及HTML/XML标签时尤为繁琐。 现代C++通过原始字符串字面量(Raw string literals)提供了一种更简洁的方式, 允许直接表示这些特殊字符序列.

[代码演示]

int main()
{// 常规字符串std::string str_Demo{ R"(C:\)" };// 宽字符串std::wstring wstr_Demo{ LR"(C:\)" };// 使用原始字符串表示正则表达式std::wstring wstr_Regex{ LR"(\d{3}-\d{2}-\d{4})" };// 使用原始字符串表示HTML代码片段std::wstring wstr_Html{ LR"(<!DOCTYPE html><html><head><title></title></head><body></body></html>)" };return 0;
}

常规字符串示例

std::string str_Demo{ R"(C:\)" };


这里使用R"()"表示原始字符串字面量, 不需要对反斜线\进行转义, 因此直接将路径写入代码中, 大大减少了编写复杂字符序列时的负担.

宽字符串示例:

std::wstring wstr_Demo{ LR"(C:\)" };


类似于常规字符串, 但通过添加前缀L表示这是一个宽字符类型的原始字符串字面量. 这在处理需要使用Unicode或其他多字节编码格式文本时非常有用.

正则表达式示例:

std::wstring wstr_Regex{ LR"(\d{3}-\d{2}-\d{4})" };


正则表达式通常包含大量的反斜线\, 使用原始字符串字面量可以避免这些字符的转义. 这样更容易阅读和维护.

HTML代码片段示例:

std::wstring wstr_Html{ LR"(<!DOCTYPE html><html><head><title></title></head><body></body></html>)" };


通过原始字符串字面量, 可以清晰地表示HTML代码段而不用担心引号和反斜线的转义问题.

[总结]
现代C++中的原始字符串字面变量R"()"和LR"()"为开发者处理复杂字符序列提供了一种简便高效的方式, 这些特性不仅使得代码更易读, 还减少了编写时可能出现的错误. 无论是文件路径、正则表达式,还是HTML/XML片段,通过使用原始字符串字面量, 开发者能够以极其简洁和直观的方式进行表示. 在实际应用中, 原始字符串能最大限度减少字符串操作进行过滤的程序, 可以使以前的复杂操作变得更为简单.


http://www.ppmy.cn/devtools/151159.html

相关文章

Rk3568 Andorid 11 新增adb检测,只有使用客户私钥的设备才能链接adb

Rk3568 Andorid 11 新增adb检测&#xff0c;只有使用客户私钥的设备才能链接adb 问题描述 在进行Rk3568 Android 11 的定制中 遇到一个安全类的问题&#xff0c;客户需要管理用户使用adb&#xff0c;只有使用指定公私钥的设备才能链接adb&#xff0c;防止设备被私自修改文件或…

深入学习 Python 量化编程

深入学习 Python 量化编程 第一章&#xff1a;Python 基础与量化编程环境搭建 1.1 安装必要的库 首先&#xff0c;你需要安装一些在量化编程中常用的 Python 库。可以通过以下命令安装这些库&#xff1a; pip install numpy pandas matplotlib yfinance backtrader scikit-…

【大数据】机器学习------决策树

一、基本流程 决策树是一种基于树结构的分类和回归方法&#xff0c;它通过对特征空间进行划分&#xff0c;每个内部节点表示一个特征测试&#xff0c;每个分支代表一个测试输出&#xff0c;每个叶节点代表一个类别或回归值。 特征选择&#xff1a;根据某种准则&#xff08;如信…

利用开源AI智能名片2+1链动模式S2B2C商城小程序拓展社交电商的深度实践探索

摘要&#xff1a;在数字化浪潮席卷全球的今天&#xff0c;社交电商作为一种新兴的商业模式&#xff0c;正以前所未有的速度改变着消费者的购物习惯与商家的营销策略。本文深入探讨了开源AI智能名片21链动模式S2B2C商城小程序在社交电商领域的应用&#xff0c;通过分析其核心机制…

PHP 字符串

PHP 字符串 引言 在 PHP 中&#xff0c;字符串是一种非常基础且重要的数据类型。字符串可以包含字母、数字、标点符号以及特殊字符。PHP 提供了丰富的字符串函数&#xff0c;使得字符串操作变得简单而高效。本文将详细介绍 PHP 中字符串的常用操作&#xff0c;包括字符串的创…

Java在云计算中的应用:Java的秘密云基地

Java在云计算领域的应用非常广泛&#xff0c;它以其跨平台性、强大的生态系统和安全性成为了构建云服务的重要工具。以下是Java在云计算中的一些关键应用和优势&#xff1a; 1. 微服务架构 Java特别是Spring Boot框架&#xff0c;为开发微服务提供了强大支持。通过微服务架构&…

基于当前最前沿的前端(Vue3 + Vite + Antdv)和后台(Spring boot)实现的低代码开发平台

项目是一个基于当前最前沿的前端技术栈&#xff08;Vue3 Vite Ant Design Vue&#xff0c;简称Antdv&#xff09;和后台技术栈&#xff08;Spring Boot&#xff09;实现的低代码开发平台。以下是对该项目的详细介绍&#xff1a; 一、项目概述 项目名称&#xff1a;lowcode-s…

uniapp 预加载分包,减少loading

在 uniapp 中&#xff0c;可以通过配置 pages.json 文件中的 preloadRule 属性来实现页面预加载功能。以下是具体操作步骤&#xff1a; 1. 在 pages.json 中配置 preloadRule preloadRule 用于指定哪些页面需要预加载&#xff0c;以及预加载时机。下面是一个示例配置&#xf…