繁体   English   中英

从派生引用到基本引用的static_cast编译器错误

[英]static_cast compiler error from derived reference to base reference

在我发布的最近一个问题的评论中( C ++:在派生类构造函数中调用基类赋值运算符的错误形式? ),我遇到了另一个问题,涉及如何使用static_cast从派生类型转换为基类。 支持此问题的文档可以在以下位置找到: 为什么对基类的static_cast(* this)创建一个临时副本?

我的主要问题是,使用static_cast将其强制转换为派生类中的基类现在没有问题。 但是,我无法执行从派生引用到基本引用的静态转换。 我只在派生类的相等运算符中执行此操作。 这是问题所在:

bool Derived::operator==(const Derived& other_derived) {
  // first call the operator == from the base class...
  if (static_cast<Base&>(*this) == static_cast<Base&>(other_derived)) {
    // continue checks for derived member variables
  }
}

编译器对上面的if语句大喊大叫。 它的static_cast没问题,但是不能将static_cast从派生类解释为基类。 如果删除引用,则可以很好地编译,但是如两个引用的问题所示,这将不必要地创建一个临时对象。

结果,我想知道是否可能缺少从派生类转换为基类的构造函数。 我将在哪里编写这样的构造函数(因为它是基本类型的构造函数)? 我认为在基本源代码中这样做没有任何意义,因为这实际上并不能使基类自定义并破坏可重用代码的精神吗?

一个更简单的选择是只接受该函数中对象的临时创建,但是该函数可能会最终被调用,因此我不确定是否可以接受性能下降。

我还有其他需要考虑的地方吗? 与往常一样,在此先感谢您的帮助。

为此,所有功劳归@jogojapan所有。 从未将派生类和基类中的operator ==定义/声明为const。 将所有相等和不相等运算符更改为const函数即可生成程序。 另外,我还必须稍微更改static_cast语法以强制转换为const类型。 那是:

static_case<const Base&>(derived_object);

再次感谢您的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM