前缀和后缀运算符c ++

Kio*_*Key 5 c++ operators prefix-operator postfix-operator

class compl{
    float re,im;

public:
    compl(float r, float i)
        {re=r; im=i;}
    compl& operator++()
        {++re; return*this;} //(1)
    compl operator++(int k){
        compl z=*this; re++; im+=k; return z;} //(2)
    friend compl& operator--(compl& z)
        {--z.re; return z;}
    friend compl operator--(compl& z,int k)
        {compl x=z; z.re--; z.im-=k; return x;}
};
Run Code Online (Sandbox Code Playgroud)

(1)为什么我们必须通过引用返回当前对象?据我所知,引用只是某个东西的第二个名称.

(2)为什么我们必须在z中保存当前对象,然后更改对象并返回未更改的z?这样做,我们将返回未增加的值.是因为后缀运算符的工作方式(它返回旧的值,然后增加它)

Luc*_*ore 2

(1) 您不必这样做,但这是惯用的,因为它允许链接运算符或调用。

(2) 是的,postfix 应该返回之前的值。