gpt4 book ai didi

c++ - CRTP 和默认赋值运算符

转载 作者:太空狗 更新时间:2023-10-29 21:03:17 25 4
gpt4 key购买 nike

在以下内容中:

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&);

注意返回类型是完全自由的,至于其他方法。您可以使用 voidbool 等等。为了允许赋值链接,返回对 self 的引用只是惯用(但不是必需的):a = b = c = 0; 这本身源于重载运算符应遵循其内置运算符的语义的准则。

关于c++ - CRTP 和默认赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13785973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com