为什么输出以下程序:
str str
而不是这个:
str str
这是该计划:
#include <iostream>
int main()
{
std::cout << "str \
str \n";
}
我尝试了gcc 4.7.2和MSVC-11.0。
答案 0 :(得分:9)
因为换行符之前的\
表示行继续。 * 所以你的两行字面拼接在一起,包括所有的空格。
您可以尝试这样做:
std::cout << "str "
"str \n";
因为相邻的字符串文字是连接的。
<小时/> *来自C99,第5.1.1.2节:
子>反斜杠字符(
\
)的每个实例后面紧跟一个换行符 删除字符,拼接物理源行以形成逻辑源行。
答案 1 :(得分:4)
反斜杠由预处理器替换,具有以下规则:删除\
后跟换行符的每个序列。
C11(n1570),§5.1.1.2翻译阶段
反斜杠字符(\
)的每个实例后面紧跟一个换行符 删除字符,拼接物理源行以形成逻辑源行。
一个常见的解决方案是使用相邻的字符串字符串联。
std::cout << "str"
"str\n";
C11(n1570),§5.1.1.2翻译阶段
相邻的字符串文字标记是连接的。
答案 2 :(得分:3)
换行符前面的反斜杠表示字符串在下一行继续。下一行的前面有许多空白字符。
尝试:
std::cout << "str "
"str \n";