从派生类内调用运算符 这是从有效C++ 16版第第二版史葛迈尔斯(第70页)
作者在没有太多解释的情况下写道,当基类运算符=以以下方式调用时从派生类内调用运算符 这是从有效C++ 16版第第二版史葛迈尔斯(第70页),c++,operator-keyword,effective-c++,C++,Operator Keyword,Effective C++,作者在没有太多解释的情况下写道,当基类运算符=以以下方式调用时 Base::operator=(rhs); 如果运算符=是由编译器生成的(请参见第45项),则某些编译器(尽管错误地)会拒绝此选项,以便更好地使用 static_cast<base&>(*this) = rhs; static_cast(*this)=rhs; 在第45项中,他提到如果基类操作符=是私有的,则派生类=无权调用它 但在最初的问题中,编译器拒绝了它,因为它是由编译器生成的(必须是公共的) 这方面
Base::operator=(rhs);
如果运算符=
是由编译器生成的(请参见第45项),则某些编译器(尽管错误地)会拒绝此选项,以便更好地使用
static_cast<base&>(*this) = rhs;
static_cast(*this)=rhs;
在第45项中,他提到如果基类操作符=
是私有的,则派生类=
无权调用它
但在最初的问题中,编译器拒绝了它,因为它是由编译器生成的(必须是公共的)
这方面的任何帮助(链接)都会很有帮助。(用谷歌搜索这类问题非常困难)
但在最初的问题中,编译器是
拒绝它,因为它是生成的
由编译器(必须是公共的)
也许我知道你想要什么
编译器生成的赋值运算符变为公共运算符。但第16项并不是关于访问级别。此static\u cast(*This)
是一种针对损坏编译器的解决方案。在第16项中,Scott Meyers说,当编译器生成基类赋值运算符时,可能需要解决方法。顺便说一句,自从第二版出版以来,变化很大。第三版不再提及解决方案
关于私人转让经营者。第45项指出,如果基类赋值运算符是私有的,则编译器无法为派生类生成赋值运算符,因为编译器生成的赋值运算符依赖于基类赋值运算符。在这种情况下,您必须手动为派生类编写赋值运算符,或者让派生类不带赋值运算符
但在最初的问题中,编译器是
拒绝它,因为它是生成的
由编译器(必须是公共的)
也许我知道你想要什么
编译器生成的赋值运算符变为公共运算符。但第16项并不是关于访问级别。此static\u cast(*This)
是一种针对损坏编译器的解决方案。在第16项中,Scott Meyers说,当编译器生成基类赋值运算符时,可能需要解决方法。顺便说一句,自从第二版出版以来,变化很大。第三版不再提及解决方案
关于私人转让经营者。第45项指出,如果基类赋值运算符是私有的,则编译器无法为派生类生成赋值运算符,因为编译器生成的赋值运算符依赖于基类赋值运算符。在这种情况下,您必须手动为派生类编写赋值运算符,或者让派生类不带赋值运算符。关于什么的帮助?这本书似乎非常清晰明了。您有什么问题?如果您处理的是类层次结构,最好根本不要使用赋值。具体是关于什么的帮助?这本书似乎非常清晰明了。您有什么问题?如果您处理的是类层次结构,最好根本不要使用赋值。似乎静态_cast(*这)只是一个解决坏编译器的方法。它与public/private=operator无关。这本书在第45项中引用第16项是错误的,反之亦然。似乎static_cast(*this)只是一个解决坏编译器的方法。它与public/private=operator无关。本书在第45项中提到第16项是错误的,反之亦然。