5

我无法意识到如何在没有编译器抱怨的情况下以这种方式打印字符串:

std::cout << "Hello " "World!";

事实上,上面这行代码的工作原理完全一样:

std::cout << "Hello " << "World!";

这种行为有解释吗?

4

3 回答 3

11

相邻的文字标记会自动连接,这是标准的一部分。

2.1 翻译阶段 [lex.phases]

6) 相邻普通字符串文字标记被连接起来。连接相邻的宽字符串文字标记。

(C++03)

于 2012-10-09T13:59:57.403 回答
1

在 C++ 中,文字标记可以这样连接:

const char* thingy = "Hello" "World";

"Hello""World" 都是文字标记。

于 2012-10-09T14:00:31.207 回答
1

这是字符串的正常行为。在第一行,指定的字符串由编译器自动连接。作为示例,您还可以指定多行以避免很长的行。

const char *strLine = "line 1 "
                      "line 1 "
                      "line 2 ";

它会正常工作。第二行被清除,指定另一行输出。

于 2012-10-09T14:25:00.320 回答