我有奇怪的这段代码:
int main() {
string a = "TRY";
string b = "THIS";
a += b[0] + '!'; //This outputs "TRYu"?
//a = a + b[0] + '!'; //This outputs "TRYT!" as expected.
cout << a;
}
以上两个陈述不应该相同吗?
最佳答案
不,您的第一个例子不等于
a = a + b[0] + '!'
而是
a = a + ( b[0] + '!' )
您知道char是数字值。由于
b[0]
和'!'
都是字符,因此b[0] + '!'
不会给您串联,而是给您一个加法(基本上是b[0] + 33
)。然后,您将尝试将代码b[0] + 33
的ASCII字符附加到字符串中。由于b[0]
是'T'
(ASCII 84),所以最终得到的字符是ASCII代码117:'u'
。您必须将
'!'
替换为std::string("!")
才能修复代码并进行串联。关于c++ - 字符串类赋值运算符(+ =)表现异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14410313/