const字符串在最后附加时不起作用

时间:2012-06-12 21:39:06

标签: c++ string

  

可能重复:
  Concatenate two string literals

为什么这不起作用?

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

但这很好用

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

请向我解释。

由于

5 个答案:

答案 0 :(得分:5)

原因是没有operator+用于添加两个字符串文字,并且不需要它。如果你只是删除 +,那么你的第一个例子就可以了。

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

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

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


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

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

这取决于相关性。

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

答案 4 :(得分:0)

“const string在末尾附加不起作用”是一个红色的鲱鱼。这不起作用:

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

其他答案解释了无法解决的原因。