前置和后置++的区别
定义
++a表示取a的地址,增加它的内容,然后把值放在寄存器中;
a++表示取a的地址,把它的值装入寄存器,然后增加内存中的a的值;
效率
迭代器和其他模板对象使用前缀形式 (++i) 的自增, 自减运算符,因为前置自增 (++i) 通常要比后置自增 (i++) 效率更高。
类实现
Example& operator++() //前置++ { ++i; return *this; } const Example operator++(int) //后置++ { Example temp = *this; ++(*this); return temp;//返回的是之前的值 }
前置++直接返回加 1 之后的原引用即可,而后置++要返回存储了之前的*this值的 const 类型。
const 理由
使(a++)++; 和a++ = 1; 等语句无法通过编译,因为它不是左值,和内置类型保持一致。但是考虑++(++a); 因为前置返回引用所以可行,与内置类型一致。
为什么要有一个int?
实际上int只起到占位作用,防止函数形参和前置++完全一样。换成double行不行呢?实验之后发现
BigInteger.cpp:49:39: error: parameter of overloaded post-increment operator must have type 'int' (not 'double') const BigInteger operator ++ (double){ ^ 1 error generated.
不行!在语言规范制定之时就内定了只能由int来占这个位。

浙公网安备 33010602011771号