C++增量运算符
如何区分重载运算符 ++ 的两个版本?
const T& operator ++(const T& rhs)
哪一个?
i++;
++i;
How to differentiate between overloading the 2 versions of operator ++ ?
const T& operator ++(const T& rhs)
which one?
i++;
++i;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
对于非成员版本,只有一个参数的函数是前缀,而具有两个参数且第二个为
int
的函数是后缀:对于成员版本,零参数版本是前缀,采用
int
的单参数版本是后缀:后缀运算符调用的
int
参数的值为零。For the non-member versions, a function with one parameter is prefix while a function with two parameters and the second being
int
is postfix:For the member-versions, the zero-parameter version is prefix and the one-parameter version taking
int
is postfix:The
int
parameter to calls of the postfix operators will have value zero.这些运算符是一元的,即它们不采用右侧参数。
至于您的问题,如果您确实必须重载这些运算符,则对于预增量,请使用签名
const T&运算符 ++()
,对于后增量,const T&运算符(int)
。 int 参数是一个虚拟参数。These operators are unary, i.e., they do not take a right hand side parameter.
As for your question, if you really must overload these operators, for the preincrement use the signature
const T& operator ++()
, and for the postincrement,const T& operator(int)
. The int parameter is a dummy.对于后缀 ++ 和 -- 运算符,该函数必须采用虚拟
int
参数。如果它没有参数,那么它是前缀运算符for the postfix ++ and -- operators, the function must take a dummy
int
argument. if it has no argument, then it's the prefix operator将后缀增量
i++
视为具有第二个(缺失)参数(即i++x
)。因此后缀增量签名有一个右侧参数,而前缀增量签名则没有。Think of postfix increment
i++
as having a second (missing) parameter (i.e.i++x
). So postfix increment signature has a righthand parameter while the prefix increment does not.