#include<iostream>
using namespace std;
class Mybase
{
public:
Mybase(int value):my_base(value){ }
Mybase& operator++()
{
Mybase tmp(*this);
++my_base;
return tmp;
}
Mybase operator++(int)
{
++my_base;
return *this;
}
private:
int my_base;
};
前缀表达是正确的,还是后缀表达式是正确的?
答案 0 :(得分:0)
通常可以使用前缀或后缀。但有时它会产生影响。标准样式是优先选择前缀形式,如++i
,当它没有区别时。 (这很难相信,因为存在一种名为C ++的着名语言,但没有一种称为++ C,但它存在。)
更喜欢前缀形式的原因与堆栈机制有关。考虑像
这样的陈述int n = 2 * (++i - 5);
这里,变量i
递增,然后在它的立场使用,它的旧值立即被遗忘。相反地考虑
int n = 2 * ((i++) - 5);
这里,变量i
的值必须作为临时值复制到堆栈中,之后i
分别递增。在这种情况下,处理器会更多地触及i
。
不可否认,优化编译器可能能够在两种情况下生成同样有效的代码,但++i
本质上更清晰,因为i
的旧值立即变得无关紧要,只要i
++i
1}}更新,之后没有任何优化。由于在两种形式之间通常没有其他原因可供选择,因此{{1}}通常是首选。
答案 1 :(得分:0)
你反过来了。 第一个运算符定义具有前缀运算符的签名但实现了后缀运算符,第二个定义具有后缀的签名但具有前缀主体。 只需交换两种方法的主体就可以了。