我最近在玩琴弦,遇到一个奇怪的问题。在运算符重载期间,使用+表示字符串连接。我试图用两个字符重载到一个字符串。它给了我一种特殊的行为。

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


我希望结果是精打细算。但是,它返回den╫。我想知道,我的方法出了什么问题。
它在我尝试单独行时(如下所示)有效。

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


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

最佳答案

a+='e'+'r';


涉及两个运算符。根据其关联规则,它们按以下顺序工作:


'e'+'r'计算
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操作系统,如'e' is 101 (decimal)'r' is 114 (decimal),则它们的总和为215 (decimal) which stands for 'Î' in extended ASCII

关于c++ - C++中+的运算符重载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50933760/

10-11 15:18