我试图将两个字母附加到一个字符串,但似乎字符串没有改变:
void fun()
{
string str;
str += 'a' + 'b';
cout << str;
}
我检查了STL的源代码并找到了operator+=
的实现,但我仍然不知道原因。
basic_string&
operator+=(_CharT __c)
{
this->push_back(__c);
return *this;
}
答案 0 :(得分:7)
通过添加'a' + 'b'
,您将添加2个字符以形成另一个字符。然后使用+=
将其添加到字符串中。
此代码将执行您想要的操作:
std::string str;
( str += 'a' ) += 'b';
std::cout << str;
答案 1 :(得分:3)
您通常如何在代码中添加字符串?
string str = "qaz123";
你可以做到
str = str + " another string"
(理论上,在实践中它可能是任何东西)等同于
str += " another string"
您可以使用
str += 'a'
因为有一个运算符为char类型重载。
你试图这样做:
str += 'a' + 'b'
试试这个应用:
#include <typeinfo>
#include <iostream>
int main(void)
{
std::cout << typeid('a').name() << std::endl;
std::cout << typeid('a'+'b').name() << std::endl;
}
结果如下:
c
i
这意味着,'a'+'b'
计算为整数。
现在的问题是:执行str += 'a'+'b'
时实际调用了哪个运算符。
最有可能调用char
运算符,char值为195
。
在我的系统上,195
字符为├
。你的是什么?
答案 2 :(得分:2)
你这里没有使用过字符串。 使用显式强制转换。或者将其声明为字符串变量。
例如:
void fun()
{
string str, str1 = 'a', str2 ='b';
str += str1 + str2
cout << str;
}
OR
void fun()
{
string str;
str += string("a") + 'b';
cout << str;
}
答案 3 :(得分:2)
str + ='a'+'b';当运行它时,单个运算符'+'优先于复数运算符'+ =',因此首先计算两个char符号的总和,并且总和结果为195('a'的ASCII值为97,'b'是98),然后运行类字符串的重载运算符'+'。跟踪到函数,你会发现它只接受char的参数,所以它转换为值为-61(195-256 == - 61)的char。但它是未打印的符号,因此结果为0。当然,你不能通过你的设计得到一个新的字符串。
你可以像这样重新编码:
string str;
str += 'a';
str += 'b';