0

我的这段代码表现得很奇怪:

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;

}

以上两种说法不应该是一样的吗?

4

4 回答 4

3

不,你的第一个例子不等于

a = a + b[0] + '!'

而是为了

a = a + ( b[0] + '!' )

你知道 char 是一个数值。因为b[0]'!'都是字符,所以b[0] + '!'不会给你一个连接,而是一个加法(b[0] + 33基本上)。然后您将尝试将代码的 ASCII 字符附加b[0] + 33到您的字符串中。由于b[0]is 'T'(ASCII 84),你最终得到 ASCII 码 117 : 的字符'u'

您将不得不替换'!'bystd::string("!")以修复代码并进行连接。

于 2013-01-19T01:49:43.253 回答
2

不,char + char = char;

std::string + char = std::string;

在你的第二个例子中。

a = a + b[0] + '!';

将会

string = ((string + char) + char)

你总是在向std::string对象添加一些东西

于 2013-01-19T01:49:03.863 回答
1

a += b[0] + '!';  

首先评估该b[0] + '!'部分。就像b[0]一个字符和'!' 是一个 char (原始类型),+运算符以算术方式将它们相加以产生另一个 char,然后使用运算符将​​其附加到字符串中+=

于 2013-01-19T01:50:10.830 回答
0

b[0] 只是一个字符。所以 b[0] + '1' 是 char + char,这不好。内置类型不像字符串那样有任何花哨的东西,它们只是添加值。;) 在第二个(工作)示例中,b[0] 被添加到 a 然后 '!' 被添加到其中,所以总是使用字符串运算符。

于 2013-01-19T01:49:54.290 回答