繁体   English   中英

前缀和后缀运算符c ++

[英]prefix and postfix operators c++

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;}
};

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

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

(1)你不必,但它是惯用的,因为它允许链接操作员或电话。

(2)是的,后缀应该返回先前的值。

1- Operator ++重载必须通过引用返回,但如果您不需要变量的别名,则可以添加一个名为next的函数或具有相同结构的类似函数。

2-是,因为您需要返回当前值然后递增变量。

(1)因为我们希望++也返回一个值,就像在

a = b++;

它的成本低于返回副本的成本。

(2)是的,这是后缀运算符的工作方式。 这解释了为什么通常建议使用前缀增量来编写带迭代器的循环

for(iterator it = ..... ; it != .... , ++it) { ...}

而不是后缀增量:它避免构建临时副本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM