c++ - 当我只想禁用它时,自定义赋值 operator=() 的签名是否重要?

标签 c++ operator-overloading assignment-operator

我需要禁用复制赋值运算符。这将起作用:

A& operator=(const A&);

如果我不为 operator= 指定确切的参数,它会工作吗?
我的意思是这样的:

void operator=(void);

返回值是对的,我可以随便写,但是参数类型呢?
这会覆盖类的默认 operator= 吗?

最佳答案

来自 12.8p17 C++标准草案:

A user-declared copy assignment operator X::operator= is a non-static non-template member function of class X with exactly one parameter of type X, X&, const X&, volatile X& or const volatile X&.

我想这比任何其他测试或示例代码的回复都要好。

请注意,类似的事情也适用于移动赋值运算符,请参阅 12.8p19 :

A user-declared move assignment operator X::operator= is a non-static non-template member function of class X with exactly one parameter of type X&&, const X&&, volatile X&&, or const volatile X&&.

这些也证实了,正如您所猜测的,返回值类型并不重要。

关于c++ - 当我只想禁用它时,自定义赋值 operator=() 的签名是否重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37507671/

相关文章:

c++ - 当我编写这个程序时,这些标志会被调用吗?

c++ - 有人知道这个 C++ 内联汇编的作用吗?

delphi - 重载三个扩展记录的添加运算符

r - R S4 类和 Matrix 包中重载 + 运算符

R 函数中的全局赋值运算符 - 有什么更好的选择?

C++:std::copy 失败,访问冲突读取位置错误

c++ - 代码生成期间的宏替换

C++ 运算符 << 重载

C++ 函数返回一个右值,但可以分配一个新值?

c++ - 如何将具有 "deleted"复制构造函数和赋值运算符的类放入映射中?