当存在修饰符(L,u8等)时,相邻字符串文字串联会发生什么

Ben*_*oit 11 c++ string-literals c++11

它在C和C++中有效打破字符串文字,因为预处理器或编译器将连接相邻的字符串文字.

const char *zStr = "a" "b"; // valid
Run Code Online (Sandbox Code Playgroud)

当字符串文字以L(宽字符),u(UTF-16),U(UTF-32),u8(UTF-8)和原始字符串文字(R"foo(this is a "raw string literal" with double quotes)foo")作为前缀时会发生什么?

例如,允许以下内容:

const wchar_t *zStr = L"a" "b"; // valid?
Run Code Online (Sandbox Code Playgroud)

How*_*ant 12

在C++ 0x中,根据[lex.string]/p13,您的示例有效:

...如果一个字符串文字没有编码前缀,则将其视为与另一个操作数相同的编码前缀的字符串文字....

在C++ 03中,同一部分表示此代码具有未定义的行为:

...如果窄字符串文字标记与宽字符串文字标记相邻,则行为未定义....