我的代码很奇怪:
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;
}
上述两个陈述不应该相同吗?
答案 0 :(得分:3)
没有。你的第一个例子不等于
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("!")
才能修复代码并进行连接。
答案 1 :(得分:2)
不,char + char = char;
std::string + char = std::string;
在你的第二个例子中。
a = a + b[0] + '!';
将是
string = ((string + char) + char)
您总是向std::string
对象添加内容
答案 2 :(得分:1)
在
a += b[0] + '!';
首先评估b[0] + '!'
部分。由于b[0]
是一个字母和'!'是一个char(原始类型),+
运算符以算术方式添加它们以生成另一个char,然后使用+=
运算符将其附加到字符串。
答案 3 :(得分:0)
b [0]只是一个字符。所以b [0] +'1'是char + char,这不好。内置类型不像字符串那样有任何花哨的东西,它们只是添加值。 ;)在第二个(工作)示例中,b [0]被添加到a然后'!'被添加到那里,所以总是使用字符串运算符。