C++中的反斜杠是什么意思?

Chr*_*ian 10 c++ syntax

这段代码是什么:(特别是反斜杠'\'是什么?)

s23_foo += \ 
s8_foo * s16_bar;
Run Code Online (Sandbox Code Playgroud)

我添加了数据类型,因为它们可能是相关的.谢谢你的帮助.

Joh*_*ing 30

反斜杠在C++中表示两种不同的东西,具体取决于上下文.

作为一条线延续

在引号字符串之外(见下文),a \用作行继续符.预处理器实际上忽略了在行尾(不可见)后面的换行符,并将以下行附加到当前行.

所以:

s23_foo += \ 
s8_foo * s16_bar;
Run Code Online (Sandbox Code Playgroud)

被解析为:

s23_foo += s8_foo * s16_bar;
Run Code Online (Sandbox Code Playgroud)

线路延续可以串在一起.这个:

s23_foo += \ 
s8_foo * \
s16_bar;
Run Code Online (Sandbox Code Playgroud)

变成这样:

s23_foo += s8_foo * s16_bar;
Run Code Online (Sandbox Code Playgroud)

在C++中,空格在大多数情况下都是无关紧要的,因此在这个特定的例子中不需要行继续.这应该编译得很好:

s23_foo += 
s8_foo * s16_bar;
Run Code Online (Sandbox Code Playgroud)

事实上,当您有一长串术语时,可以帮助对代码进行分页.

由于预处理器处理a #define直到达到换行符,因此行连续在宏定义中最有用.例如:

#define FOO() \
s23_foo += \ 
s8_foo * s16_bar; 
Run Code Online (Sandbox Code Playgroud)

没有行延续字符,FOO这里将是空的.

作为逃脱序列

在引号字符串中,反斜杠用作分隔符以开始2个字符的转义序列.例如:

"hello\n"
Run Code Online (Sandbox Code Playgroud)

在此字符串文字中,\开始转义序列,转义码为n. \n导致在换行符中嵌入换行符.这当然意味着如果你想要一个字符串来包含这个\角色,你也必须逃避它:

"hello\\there"
Run Code Online (Sandbox Code Playgroud)

结果在屏幕上查看字符串:

你好

各种转义序列都记录在这里.

  • 值得一提的是:`code;//comment\<new-line>comment continue<new-line>code;` (2认同)

ben*_*ous 23

它允许您将语句继续到下一行 - 通常只需要在#define宏块中使用它

  • @millimoose你可以使用反斜杠来让// //注释跨越多行.:P (3认同)