Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从派生类内调用运算符 这是从有效C++ 16版第第二版史葛迈尔斯(第70页)_C++_Operator Keyword_Effective C++ - Fatal编程技术网

从派生类内调用运算符 这是从有效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项是错误的,反之亦然。