字符串文字中的反斜杠字符

时间:2013-01-09 17:04:48

标签: c++ c

为什么输出以下程序:

str                 str

而不是这个:

str str

这是该计划:

#include <iostream>

int main()
{
   std::cout << "str \
                str \n";
}

我尝试了gcc 4.7.2和MSVC-11.0。

3 个答案:

答案 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";