C++ 中 + 的运算符重载

Operator Overloading of + in C++

最近在玩弦乐,遇到一个奇怪的问题。在使用 + 进行字符串连接的运算符重载期间。我试图将两个字符重载到一个字符串中。它 returns 我有一种奇怪的行为。

string a = 'den';
a+='e'+'r';

我希望结果是 dener。但是,它returnsden╫。我想知道我的方法出了什么问题。 当我尝试单独一行时它有效,如下所示。

string a = 'den';
a+='e';
a+='r';

我从另一个问题得到了答案。但是,我在这里重复,以解决我的问题。

a+='e'+'r';

涉及两个操作员。根据它们的关联规则,它们按以下顺序工作:

  1. 'e'+'r'计算
  2. a += result#1 计算出来。

关于 1.: 这是两个 char 类型的对象的总和,碰巧它们在你的系统上的总和是 1 .

最后,调用 std::string::operator+= 并将 附加到您的字符串。

您真正想要的是以下之一:

a += "er";
// or
a += 'e';
a += 'r';
// or
for (char c : your_char_array) {
    a += c;
}
// or
a += your_char_array;

1) 如果您使用的是 ASCII OS,如 'e' is 101 (decimal) and 'r' is 114 (decimal), their sum is 215 (decimal) which stands for 'Î' in extended ASCII.

您要添加两个数字字符。 'e' + 'r' 首先计算,因为 'e' 在 ASCII 中是 101 而 'r' 是 114,所以您将字符与代码 215 连接起来。要连接 "er":

string a = "den";
a += 'e';
a += 'r';