我正在打印这样的行
cout<<"Hello //stackoverflow";
这将产生以下输出
Hello //stackoverflow
我想知道为什么它没有给我一个错误,因为我评论了声明的一半,应该有
missing terminating " character
错误。
答案 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)
简单来说,这是因为引号内的所有内容都被识别为字符串,因此计算机不会将//视为开始注释的方式。