简体   繁体   中英

Why does // in a string does not start a comment in C++?

I am printing a line like this

cout<<"Hello //stackoverflow";

And this produces the following output

Hello //stackoverflow

I want to know why it does not give me an error as I commented half of the statement and there should be

missing terminating " character

error.

The grammar of C++ (like most of programming languages) is context-sensitive. Simply, // does not start a comment if it is within a string literal.

For an in depth analysis of this, you'd have to refer to the language grammar, and the string literal production rules in particular.

Informally speaking, the fact that // appears in the quoted string literal means that it does not denote a comment block. The same applies to /* and */ .

The converse applies to other constructs, where maximal munch requires parsing into the token denoting the start of a comment block; a space is needed before the pointer dereference operator in

#include <iostream>
using namespace std;

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM