运算符 ++ 中的 Int 参数

Posted

技术标签:

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

    public:

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

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

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

【问题讨论】:

【参考方案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 参数实际上是什么?

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

【讨论】:

以上是关于运算符 ++ 中的 Int 参数的主要内容,如果未能解决你的问题,请参考以下文章

默认参数中的 c++ new 运算符及其副作用

14:操作重载和类型转换

利用接口做参数,写个计算器,能完成+-*/运算 定义一个接口Compute含有一个方法int computer(int n,int m); 设计四个类分别实现此接口,完成+-*/运算 (3

三元运算符中的 Cout String 和 int

C++ 中的运算符重载为 int + obj

二元加运算符对 C 中的 int Array 做了啥