为什么在字符串中// //无法在C ++中开始注释?

时间:2018-07-18 15:20:43

标签: c++ string string-literals

我正在打印这样的行

cout<<"Hello //stackoverflow";

这将产生以下输出

Hello //stackoverflow

我想知道为什么它没有给我一个错误,因为我评论了声明的一半,应该有

missing terminating " character

错误。

3 个答案:

答案 0 :(得分:11)

C ++的语法(像大多数编程语言一样)是上下文相关的。简而言之,//如果在字符串文字中,则不会开始注释。

答案 1 :(得分:8)

要对此进行深入分析,您必须参考语言语法,尤其是字符串文字产生规则。

非正式地讲,//出现在带引号的字符串文字中表示它不表示注释块。 /**/也是如此。

反之也适用于其他构造,其中 maximum munch 需要解析成表示注释块开始的标记;

中的指针取消引用运算符之前需要一个空格
#include <iostream>
using namespace std;

int main() {
    int n = 1;
    int* p = &n;
    cout << 1 / *p; // Removing the final space will fail compilation.
}

答案 2 :(得分:1)

简单来说,这是因为引号内的所有内容都被识别为字符串,因此计算机不会将//视为开始注释的方式。