C++ C++;增量运算符
如何区分重载运算符++的两个版本C++ C++;增量运算符,c++,class,templates,struct,operator-overloading,C++,Class,Templates,Struct,Operator Overloading,如何区分重载运算符++的两个版本 const T& operator ++(const T& rhs) 哪一个 i++; ++i; 对于postfix++和--运算符,函数必须采用伪int参数。如果没有参数,则是前缀运算符这些运算符是一元运算符,即它们不接受右侧参数 至于您的问题,如果您确实必须重载这些运算符,那么对于预增量,请使用签名const T&operator++(),对于后增量,请使用签名const T&operator(int)。int参数是一个伪参数。将后缀增量
const T& operator ++(const T& rhs)
哪一个
i++;
++i;
对于postfix++和--运算符,函数必须采用伪
int
参数。如果没有参数,则是前缀运算符这些运算符是一元运算符,即它们不接受右侧参数
至于您的问题,如果您确实必须重载这些运算符,那么对于预增量,请使用签名
const T&operator++()
,对于后增量,请使用签名const T&operator(int)
。int参数是一个伪参数。将后缀增量i++
视为具有第二个(缺少的)参数(即i++x
)。因此,后缀增量签名有一个右手参数,而前缀增量没有。对于非成员版本,一个具有一个参数的函数是前缀,而一个具有两个参数且第二个参数为int
的函数是后缀:
struct X {};
X& operator++(X&); // prefix
X operator++(X&, int); // postfix
struct X {
X& operator++(); // prefix
X operator++(int); // postfix
};
对于成员版本,零参数版本为前缀,采用int
的单参数版本为后缀:
struct X {};
X& operator++(X&); // prefix
X operator++(X&, int); // postfix
struct X {
X& operator++(); // prefix
X operator++(int); // postfix
};
>后缀运算符调用的代码> INT/CUT>参数将值为零。
你的C++文本在主题上有什么要说的?它们可以是非成员函数。但这并不是增量运算符的首选。(无论如何,我的第一个选择是不要重载运算符。)@Daniel:如果你想编写一个C++语言的迭代器或类似迭代器的对象,你别无选择。@Zan:。。。除非您使用boost.iterator来帮助您;)@赞,这对我来说是新鲜事。如果要向迭代器添加op++
,为什么需要非成员?@gf添加一个示例,这将是最好的答案