[英]Difference between prefix and postfix increment operators overloading implementations for iterators in 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.