gpt4 book ai didi

c++ - 从派生引用到基引用的 static_cast 编译器错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:27:19 24 4
gpt4 key购买 nike

在我发布的最近一个问题 (C++: Bad Form to Call Base Class Asssignment Operator in Derived Class Constructor?) 的评论中,我遇到了另一个关于如何使用 static_cast 从派生类型转换为基类型的问题。可以在此处找到该问题的支持文档:Why does static_cast(*this) to a base class create a temporary copy? .

我的主要问题是,我现在可以毫无问题地使用 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 语句大喊大叫。它对this的static_cast没有问题,但是无法解释从派生类到基类的static_cast。如果我删除引用,这编译正常,但如两个引用问题所示,这将不必要地创建一个临时对象。

因此,我想知道我是否缺少从派生类到基类的构造函数。我应该在哪里编写这样的构造函数(因为它是基类型的构造函数)?我认为在基类的源代码中这样做没有意义,因为这不会在本质上使基类自定义并破坏可重用代码的精神吗?

一个更简单的替代方案是只接受在此函数内临时创建对象,但该函数最终可能会被频繁调用,因此我不确定我是否可以接受性能损失。

还有什么我应该考虑的遗漏的吗?一如既往,提前感谢您的帮助。

最佳答案

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

static_case<const Base&>(derived_object);

再次感谢您的帮助!

关于c++ - 从派生引用到基引用的 static_cast 编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17310785/

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