string s;
s += "#" + ','; //give error
s += "#" + ","; //give error
s += to_string(23) + ','; //no error
使用 + 运算符将新字符和字符串连接到现有字符串的正确方法是什么?什么时候会抛出错误?有人还可以阐明append()和push_back()与“+”有何不同以及哪种是最佳方式吗?
问题在于
operator+
的优先级高于 operator+=
。这意味着 s += "#" + ','
等价于 写作
s += ("#" + ','); //same as
现在,
"#"
是const char [2]
类型的字符串文字,而
','
是char
类型的字符文字。所以基本上,在这种情况下,您尝试将字符串文字添加到字符。现在,当您执行此操作时,字符串文字会衰减为
const char*
,并且字符文字会提升为 int
。
本质上,这会在
const char*
上添加一个 int
。其结果用作 +=
的操作数。