添加字符串和文字,如果您可以无误地添加字符串,顺序将如何影响

Adding strings and literals, how does the order affect if you can add the strings without error

考虑以下字符串定义:

string s1 = "hello", s2 = "world";
string s6 = s1 + ", " + "world";
string s7 = "hello" + ", " + s2;

C++ Primer 5e 一书指出,第三行将导致编译器出错,因为您无法添加字符串文字。编译器给出的实际错误是

error: invalid operands of types 'const char [6]'
and 'const char [3]' to binary 'operator+'

但是第二个字符串 s6 不是和 s7 做同样的事情吗?有什么区别?

由于加法关联 left-to-right,s6 被解析为 (s1 + ", ") + "world"。这会将 string 添加到 const char *,从而得到另一个 string。然后我们将另一个 const char * 添加到那个 string,导致存储在 s6.

中的第三个 string

s7 被解析为 ("hello" + ", ") + s2,它试图将一个 const char * 添加到另一个 const char *,而你不能这样做。您可以将其重写为 "hello" + (", " + s2) 然后它会编译。