代码之家  ›  专栏  ›  技术社区  ›  Aswin

C++中运算符重载

  •  0
  • Aswin  · 技术社区  · 7 年前

    我最近在玩弦乐,我遇到了一个奇怪的问题。在运算符重载期间使用+进行字符串连接。我试着用两个字符来重载一个字符串。这让我回想起一种奇怪的行为。

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

    我希望结果是 小精灵 . 但是,它又回来了 巢穴 . 我想知道,我的方法出了什么问题。 当我试着把它分开的时候,就像下面这样。

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

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

    2 回复  |  直到 7 年前
        1
  •  3
  •   YSC    7 年前
    a+='e'+'r';
    

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

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

    大约1.:这是两个类型的对象的和 char 它们在你的系统中的总和是 ╫ .

    最后, 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 .

        2
  •  -1
  •   Alexandru Ica    7 年前

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

    string a = "den";
    a += 'e';
    a += 'r';
    
    推荐文章