【问题标题】:Is it allowed to name the parameter in postfix operator ++?是否允许在后缀运算符++中命名参数?
【发布时间】:2011-08-30 23:39:01
【问题描述】:

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

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

第二次通话

【问题讨论】:

  • 我什至不知道这是允许的......狂野。

标签: c++ operator-overloading


【解决方案1】:

a++ 等价于a.operator++(0);。您的代码有效

13.5/7

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2017-06-30
        • 2014-12-03
        • 1970-01-01
        • 1970-01-01
        • 2015-04-10
        • 1970-01-01
        • 1970-01-01
        • 2019-06-04
        • 2020-03-11
        相关资源
        最近更新 更多