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