后缀运算符中的参数是否允许命名为++?

发布于 2024-11-09 07:06:59 字数 436 浏览 0 评论 0原文

我没有在任何生产环境中使用此代码,这只是为了我的理解。这段代码是否有效(即我可以像这样定义我的后缀运算符吗?):

class A
{
public:
    A& operator++(int n)
    {
        std::cout<<"N is:"<<n<<"\n";
        return *this;
    }
};


int main()
{   
    A a;
    a++;
    a.operator ++(10);
}

在 VS2008 上,我得到的输出为:

N 为 0

第一次调用时

N 为 10

第二次调用时

I am not using this code in any production environment, it is just for my understanding. Is this code valid (i.e. can I define my postfix operator like this?):

class A
{
public:
    A& operator++(int n)
    {
        std::cout<<"N is:"<<n<<"\n";
        return *this;
    }
};


int main()
{   
    A a;
    a++;
    a.operator ++(10);
}

On VS2008, I get the output as:

N is 0

for first call and

N is 10

for second call

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(3

野の 2024-11-16 07:06:59

这种行为是合法的,并且在 13.5.7 中有明确定义:

显式调用operator++,如
像 a.operator++(2) 这样的表达式,有
没有特殊属性:参数
运算符++是2。

This behavior is legal and well defined in 13.5.7:

Calling operator++ explicitly, as in
expressions like a.operator++(2), has
no special properties: The argument to
operator++ is 2.

向日葵 2024-11-16 07:06:59

a++ 相当于 a.operator++(0);。您的代码有效期为

13.5/7

当使用 ++ 运算符调用后缀增量时,int
参数的值为零。

a++ is equivalent to a.operator++(0);. Your code is valid

13.5/7

When the postfix increment is called as a result of using the ++ operator, the int
argument will have value zero.

岁月流歌 2024-11-16 07:06:59

是的,int 作为参数是有效的,它只是一个区分前缀和后缀运算符的策略执行参数。传递的参数将作为参数被接收,这是您看到的行为&这是完全定义的行为。

Yes, it is valid the int as a parameter it only a policy enforcing parameter to distinguish between prefix and postfix operators. The passed parameter will be received as an argument, which is the behavior you see & it is prfectly defined behavior.

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