为什么这不起作用?
const std::string exclam = "!";
const std::string message = "Hello" + ", world" + exclam;
但这很好用
const std::string exclam = "!";
const std::string message = exclam +
"Hello" + ", world" ;
请向我解释。
由于
答案 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";
其他答案解释了无法解决的原因。