在同一赋值语句中将多个字符串文字转换为const char *

时间:2019-03-22 08:08:55

标签: c++ string

我是C ++的新手,我在下面的代码片段中遇到了一些奇怪的事情。

const char* keys = "hello" "world";
std::cout << keys << std::endl;

以上代码在控制台中显示 helloworld 。在同一条语句中将两个字符串文字分配给const char *在语法上是否有效?如果可以,它将如何存储在内存中?

2 个答案:

答案 0 :(得分:5)

这是C ++(和C)的规则,在编译之前(但在宏扩展IIRC之后)将相邻的字符串文字串联在一起。

这发生在任何地方,不仅是赋值语句的一部分。

答案 1 :(得分:4)

根据[lex.string],带引号(甚至带空引号)内的字符序列是字符串字面量。

根据[lex.string]/13

  

...相邻的字符串文字被串联。

所以

const char* keys = "hello" "world";

与:

const char* keys = "helloworld";