从派生类中调用操作符=

| 这来自有效的C ++第二版Scott Meyers的第16项(第70页) 作者写道,当以下列方式调用基类operator =时,无需过多解释
Base::operator=(rhs);
如果ѭ1是由编译器生成的,则某些编译器(尽管错误地)拒绝此操作(请参见第45条),因此更好地使用
static_cast<base&>(*this) = rhs;
在第45项中,他提到如果基类
operator =
是私有的,派生类
=
无权调用它。 但在最初的问题中,编译器拒绝了它,因为它是由编译器生成的(必须是公共的) 关于此的任何帮助(链接)都将有所帮助。 (用谷歌搜索这类问题非常困难)     
已邀请:
  但在最初的问题中,编译器是   拒绝它,因为它是生成的   由编译器(必须是公共的) 也许我明白你想要什么。 编译器生成的赋值运算符变为公用。但是第16项与访问级别无关。此“ 5”是损坏的编译器的解决方法。在第16项中,Scott Meyers说,当编译器生成基类赋值运算符时,可能需要解决方法。顺便说一句,自第二版发布以来,发生了很多变化。第三版不再提及解决方法。 关于私人转让经营者。条款45指出,如果将基类的赋值运算符设为私有,则编译器无法为派生类生成赋值运算符,因为编译器生成的赋值运算符依赖于基类的赋值运算符。在这种情况下,您将必须手动为派生类编写赋值运算符,或者使派生类不带赋值运算符。     

要回复问题请先登录注册