添加字符串和文字,如果您可以无误地添加字符串,顺序将如何影响
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)
然后它会编译。
考虑以下字符串定义:
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)
然后它会编译。