我有奇怪的这段代码:

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/

10-11 22:47
查看更多