原生字符串字面量 是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 的内容是:&#