CRTP 和默认分配运算符
CRTP and default assignment operator
在下面:
template<typename Derived>
class Base:
{
inline Derived& operator=(const Base<Derived>& x);
}
此声明是否删除了默认的复制赋值运算符,或者我有两个运算符:
inline Derived& operator=(const Base<Derived>& x);
// (declared by me)
和
inline Base<Derived>& operator=(const Base<Derived>& x);
// (declared by the compiler)
在这种情况下,当我调用函数时,编译器将如何获得正确的运算符?
如果声明任何可以传递给赋值运算符的方法:
XXX Foo::operator=(Foo&);
XXX Foo::operator=(Foo const&);
XXX Foo::operator=(Foo volatile&);
XXX Foo::operator=(Foo const volatile&);
则编译器不会生成默认版本Foo& operator=(Foo const&);
。
请注意,返回类型是完全免费的,与其他方法一样。你可以使用void
,bool
,任何真正的东西。为了允许赋值链接而返回对 self 的引用只是惯用的(但不是必需的):a = b = c = 0;
这本身源于重载运算符应遵循其内置对应项的语义的准则。
你试过吗?仅按返回类型重载将是一个编译错误,所以我的猜测是定义的那个替换了默认的那个。
相关文章:
- 正在尝试重载二进制搜索树分配运算符
- 自定义先决条件对移动分配运算符有效吗
- 分配给转换运算符失败-C++
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- C++ - 没有自定义交换功能的移动分配运算符?
- 如何增加以前由新运算符分配的 C++ std::list 数组的大小?
- 为什么在通过引用返回运算符分配时取消引用'this'指针?
- 使用 'new[]' 运算符分配内存
- 操作后通过运算符分配对象
- 新运算符分配的大小大于声明的大小.为什么
- 如何控制运算符 [] 分配的值
- 字符** 使用 new 运算符分配内存
- 新的运算符分配函数顺序连续性和初始值
- 如何释放使用 C++ "new" 运算符分配的 C 中的内存
- 只能使用CUDA中的新运算符分配有限的内存
- 使用友元运算符分配和私有变量是不可访问的
- 释放由赋值运算符C++分配的内存
- 确定C++中新运算符分配的内存大小
- 用于新运算符分配的公共内存
- 如何在C++中检索由新运算符分配的对象的地址