原生字符串字面量 是C++11标准引入的用于避免手动将字符串换码的新特性。
按照标准要求,其内部的一切文字都将原封不动地、所见即所得地声明为字符串。现在的问题是,预处理指令理应先于一切其他语言特性进行,在一些编译系统中(如 MinGW),预处理阶段甚至是由 cpp.exe(CPreProcessor)这一单独的程序完成的。而预处理指令处于一行开头且以#开始,如果在原生字符串字面量中的一个新行里顶头写上一句 #include 指令,会发生什么呢?
在C++98/03中,这个担心是没有必要的,因为字符串必须在一行内声明完,但由于C++11的这个新特性的提出,就产生了这一问题。事实的真相到底是什么呢?实验让你眼见为实:
//test.cpp #include <iostream> using namespace std; /**测试从这里开始*/ const char str[] = R"( #include "example.txt" )" ; int main(int argc,char * argv[]) { cout << "实际变量 str 的内容是:" << endl << str << endl; return 0; }
//example.txt 样例测试字符串
编译环境:Windows 7 旗舰版 Sevice Pack 1,Intel(R) Celeron(R) M CPU 723,32位操作系统,TDM-GCC-32 4.7.2。
编译选项:mingw32-g++ test.cpp -o test.exe -std=c++11
下面运行程序。
如果 #include 得到先一步执行,那么程序将输出 example.txt 的内容(试验时它的内容是“样例测试字符串”);如果编译器无视了 #include 指令,那么程序将输出如上代码中写入的“\n#include "example.txt"\n”。
运行结果是这样的:
prompt> mingw32-g++ test.cpp -o test.exe -std=c++11
prompt> test
实际变量 str 的内容是:
#include "example.txt"
显然,#include 指令并未被展开。
我们的结论是:原生字符串字面量中的一切文字,包括预处理指令,都会被看做是“纯”的、“普通”的文字,而不会发挥(它可能具有的)语义功能;而这也与标准中对它的“原生的、不加处理的”的描述相符。
相关推荐
处理字符串,除了字符数组,还有用C++的string类型来定义一个字符串变量(对象)。 定义字符串并进行初始化: string string1="chance"; 注意:必须要有头文件# include ; 比较:字符数组不能直接对字符变量进行...
深入理解C++11——C++11新特性解析与应用。已加入章节标签,方便读者查阅。
一个VC++可重用的字符串处理函数集,这些函数主要包括: IsNumeric——检查串是否为数字串 Upcase——变成大写串 right——从右到左截掉字符 Lowercase——变成小写串 Trim——截掉串尾的空格 ...
相同点: [list][*]字符串字面量是对象 C/C++ 中的对象(Object)指的是一块存储区。字符串字面量是不需要创建过程就可使用的对象,所以它既没有变量那样的声明或者定义(字符串字面量是无名对象),也不需要象...
《Visual C++课程设计 案例精选与编程指导》(东南大学出版社) 3.7 字符串操作 源码
相同点: [list][*]字符串字面量是对象 C/C++ 中的对象(Object)指的是一块存储区。字符串字面量是不需要创建过程就可使用的对象,所以它既没有变量那样的声明或者定义(字符串字面量是无名对象),也不需要象...
C++作为一门高级程序设计语言,自然不能自甘落后,从C++11开始,C++也开始支持原生字符串。 很多时候,当我们需要一行字符串的时候,字符串转义往往成了一个负担,写和读都带了很大的不便。例如,对于如下路径”D:\...
一些C++ 专用的字符串处理函数集,主要包括以下函数: 包括: IsNumeric——检查串是否为数字串 Upcase——变成大写串 Lowercase——变成小写串 Trim——截掉串尾的空格 RTrim——截掉串开始处的...
2748.3.1 字符集、编码和Unicode 2748.3.2 C++11中的Unicode支持 2768.3.3 关于Unicode的库支持 2808.4 原生字符串字面量 2848.5 本章小结 286附录A C++11对其他标准的不兼容项目 287附录B 弃用的特性 294附录C ...
C++实现字符串匹配函数,匹配中可以包括通配符
附件是一套C#调用C++dll时,相互传递字符串的Demo。亲测可用。
C++著名程序库的比较和学习经验 C++著名程序库的比较和学习经验(转自校内,了解一些...10、C++各大有名库的介绍——字符串 11、C++各大有名库的介绍——综合 12、C++各大有名库的介绍——其他库 13、C++名人的网站
字符串的模式匹配算法——KMP的C++实现。
c++的des 加密解密代码,vs2017编译通过,可打开debug目录下的exe,查看效果,适合参考与学习
自己写的一个类,实现对字符串的检测。 可以检查字符串是否满足某种指定的类型格式, 指定的类型格式包括整型数、浮点数、布尔型、有特殊要求的字符串等, 同时允许把字符串转换成相应的数据类型, 可用于对用户输入...
C++学习路线(csdn)————程序
第一个c++程序(csdn)————程序
斐波那契数列c++实现(csdn)————程序