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

常用网名: 猪头三

出生日期: 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)提供了一种更简洁的方式, 允许直接表示这些特殊字符序列.

代码演示

cpp 复制代码
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;
}

常规字符串示例:

cpp 复制代码
std::string str_Demo{ R"(C:\)" };

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

宽字符串示例:

cpp 复制代码
std::wstring wstr_Demo{ LR"(C:\)" };

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

正则表达式示例:

cpp 复制代码
std::wstring wstr_Regex{ LR"(\d{3}-\d{2}-\d{4})" };

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

HTML代码片段示例:

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

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

总结

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

相关推荐
间歇性努力持续性发呆的野生快乐选手2 小时前
栈的性质(进栈,出栈,访问)
数据结构·c++
旖旎夜光2 小时前
LeetCode 904:水果成篮(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口
乐观勇敢坚强的老彭4 小时前
C++ 竞赛常用算法模板速查表
开发语言·c++·算法
我变成萤火虫4 小时前
河南萌新联赛2026第(三)场:郑州轻工业大学
数据结构·c++·算法·贪心算法·stl·深度优先·哈希算法
buhuizhiyuci5 小时前
【Linux 篇】数字世界的水流蓄水池 —— IO 缓冲区机制深度实战解析
linux·运维·服务器·c++
liulilittle5 小时前
LLM 推理引擎与内核系统工程原理
c++·ai·llm·内存·memory·core·kernel
啦啦啦啦啦zzzz5 小时前
moduo网络库 Acceptor TcpConnection
服务器·网络·c++·reactor·网络库
键盘会跳舞5 小时前
C++:右值引用与移动语义源码级深度拆解——现代C++性能优化的语言基石
c++·右值引用·移动语义
码匠许师傅5 小时前
【C++ 面试真题】聊聊 C++ 的虚函数和多态
java·c++·面试
lidtao6 小时前
青少年信息学奥赛C++四阶段学习路线(L1-L4完整体系)
c++·学习·软件工程·教培资源分享