C++增量运算符

发布于 2024-08-31 07:19:43 字数 144 浏览 6 评论 0原文

如何区分重载运算符 ++ 的两个版本?

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

把时间冻结 2024-09-07 07:19:43

对于非成员版本,只有一个参数的函数是前缀,而具有两个参数且第二个为 int 的函数是后缀:

struct X {};
X& operator++(X&);      // prefix
X  operator++(X&, int); // postfix

对于成员版本,零参数版本是前缀,采用 int 的单参数版本是后缀:

struct X {
    X& operator++();    // prefix
    X  operator++(int); // postfix
};

后缀运算符调用的 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:

struct X {};
X& operator++(X&);      // prefix
X  operator++(X&, int); // postfix

For the member-versions, the zero-parameter version is prefix and the one-parameter version taking int is postfix:

struct X {
    X& operator++();    // prefix
    X  operator++(int); // postfix
};

The int parameter to calls of the postfix operators will have value zero.

三生殊途 2024-09-07 07:19:43

这些运算符是一元的,即它们不采用右侧参数。

至于您的问题,如果您确实必须重载这些运算符,则对于预增量,请使用签名 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.

抚笙 2024-09-07 07:19:43

对于后缀 ++ 和 -- 运算符,该函数必须采用虚拟 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

夕嗳→ 2024-09-07 07:19:43

将后缀增量 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文