c++ - 是否允许在后缀运算符++中命名参数?

标签 c++ operator-overloading

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

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 is 0

第一次通话和

N is 10

第二次通话

最佳答案

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

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

关于c++ - 是否允许在后缀运算符++中命名参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6094732/

相关文章:

c++ - 当我在子类中调用函数时,它会调用父类函数

c++ - 如何从 QInputDialog 获取文本(正则表达式)

c++ - 当 stream.peek()= ='\n' 时,stream >> z1 有什么用

C++ 友元函数模板重载和 SFINAE 在 clang++、g++、vc++(C++14 模式)中的不同行为

c++ - 根据维度启用一个operator()

c++ - Bool 运算符重载不起作用

C++ 可变参数模板实例化深度超过最大值 900

c++ - gcc 使用 std::initializer_list 调用构造函数而不是复制省略,而 clang 则不会。哪个编译器是正确的?

c++ - CMake:无法运行 MSBuild 命令:MSBuild.exe

c# - 永远不会调用覆盖相等运算符