string :: operator + =的问题

时间:2013-07-22 09:11:10

标签: c++ string

我试图将两个字母附加到一个字符串,但似乎字符串没有改变:

void fun()
{
    string str;
    str += 'a' + 'b';

    cout << str;
}

我检查了STL的源代码并找到了operator+=的实现,但我仍然不知道原因。

basic_string&
operator+=(_CharT __c)
{
    this->push_back(__c);
    return *this;
}

4 个答案:

答案 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';