1

可能重复:
连接两个字符串文字

为什么这不起作用?

const std::string exclam = "!";          
const std::string message = "Hello" + ", world" + exclam;

但这很好用

const std::string exclam = "!";       
const std::string message = exclam +
"Hello" + ", world" ;     

请给我解释一下。

谢谢

4

5 回答 5

5

原因是没有operator+添加两个字符串文字,也不需要。如果您只删除.+

const std::string message = "Hello"  ", world" + exclam;

因为预处理器编译器 magic*) 会将两个相邻的文字加在一起。

第二个示例有效,因为std::string确实有一个operator+添加字符串文字的。结果是另一个字符串,它可以连接下一个文字。


*) 翻译阶段 6 -连接相邻的字符串文字标记。

于 2012-06-12T21:46:07.427 回答
3

因为表达式"Hello" + ", world"不涉及任何std::string,而是两个const char[]参数。并且没有带有该签名的 operator+。您必须将其中一个转换为std::string第一个:

const std::string message = std::string("Hello") + ", world" + exclam;
于 2012-06-12T21:43:11.397 回答
1

std::string 有一个 + 运算符,这是第二个示例中使用的。const char * 没有第一个示例中使用的那个运算符。

于 2012-06-12T21:42:26.450 回答
0

这取决于关联性。

第二种情况开始(从左侧)评估与std::string连接operator+。第一种情况以 开头,并且不存在const char *任何连接。operator+

于 2012-06-12T21:45:59.507 回答
0

“如果附加在末尾,则 const 字符串不起作用”是一条红鲱鱼。这也不起作用:

const std::string message = "Hello" + ", world";

这不起作用的原因已在其他答案中进行了解释。

于 2012-06-12T21:49:35.330 回答