【问题标题】:Int Argument in operator++运算符 ++ 中的 Int 参数
【发布时间】:2011-06-07 05:55:34
【问题描述】:
class myClass
{
    public:

    void operator++()
    {
        // ++myInstance.
    }

    void operator++(int)
    {
        // myInstance++.
    }
}

除了让编译器区分myInstance++++myInstance 之外,operator++ 中的可选int 参数实际上是否适用?如果有,是什么?

【问题讨论】:

    标签: c++ class operator-overloading arguments


    【解决方案1】:

    正如@Konrad 所说,int 参数不用于任何用途,除了区分前增量和后增量形式。

    但是请注意,您的运算符应该返回一个值。前增量应该返回一个引用,后增量应该按值返回。也就是说:

    class myClass
    {
    
    public:
    
    myClass& operator++()
    {
        // ++myInstance. 
        return * this;   
    }
    myClass operator++(int)
    {
        // myInstance++.
        myClass orig = *this;
        ++(*this);  // do the actual increment
        return orig;
    }
    };
    

    编辑:

    正如 Gene Bushuyev 在下面正确提到的,operator++ 返回非 void 并不是绝对要求。但是,在大多数情况下(我想不出例外),您需要这样做。特别是如果您想将运算符的结果分配给其他值,例如:

    myClass a;
    myClass x = a++;
    

    编辑2:

    此外,对于 postimcrement 版本,您将在对象增加之前返回它。这通常使用本地临时来完成。见上文。

    【讨论】:

    • 返回某些东西可能是人们想要的,尽管这不是绝对的要求。此外,您可能会从operator++(int) 返回一个具有原始值的临时值,而不是*this。这也不是绝对要求。
    • @Gene:是的,不是绝对要求。已编辑。
    【解决方案2】:

    operator++ 中的可选 int 参数实际上是什么?

    没有。唯一的目的是区分这两个重载。很失望,我知道。 ;-)

    【讨论】:

      猜你喜欢
      • 2017-06-04
      • 1970-01-01
      • 2012-01-06
      • 2018-06-30
      • 2018-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多