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添加一个示例,这将是最好的答案