为什么是以下程序的输出:
str str
而不是这个:
str str
这是程序:
#include <iostream>
int main()
{
std::cout << "str \
str \n";
}
我尝试了 gcc 4.7.2 和 MSVC-11.0。
因为\
在换行符之前表示行继续。* 所以你的两条线实际上是拼接在一起的,包括所有的空格。
你可以试试这个:
std::cout << "str "
"str \n";
因为相邻的字符串文字是连接的。
每个反斜杠字符 (
\
) 的实例后面紧跟一个换行符都被删除,拼接物理源代码行以形成逻辑源代码行。
反斜杠被预处理器替换,规则如下:每个\
后跟换行符的序列都被删除。
C11 (n1570), § 5.1.1.2 翻译阶段
每个反斜杠字符 (\
) 的实例都被删除,紧跟一个换行符,将物理源代码行拼接成逻辑源代码行。
一个常见的解决方案是使用相邻的字符串字面量连接。
std::cout << "str"
"str\n";
C11 (n1570), § 5.1.1.2 翻译阶段
相邻的字符串文字标记被连接。
换行符前的反斜杠表示字符串在下一行继续。下一行的前面有许多空白字符。
尝试:
std::cout << "str "
"str \n";