在我的代码中,我自然而然地在没有考虑它的情况下自然地将派生结构类型转换为基础结构以调用重载函数,后来意识到它可能在某些情况下导致问题(尽管我老实说没有&# 39;知道是否以及哪个。
我的代码如下:
struct Base
{
//some variables
}
struct Derived : Base
{
//some more variables
}
bool func(const Base &base1, const Base &base2)
{
//do some stuff and return true or false
}
bool func(const Base &base, const Derived &derived)
{
if(func(base, (Base)derived))
return true;
else
//do some more stuff and return true or false
}
代码编译,功能按预期工作。
我在SO和其他地方发现了很多关于向上和向下转换的问题,但它们都涉及使用指针而不是直接类型转换为基类。在this链接中,该人直接将类型转换为派生类而不是基类。我发现没有任何问题可以直接解决这个问题,但我可能根本不知道该寻找什么,所以请在这种情况下指出正确的方向!
我假设(并且在线阅读)类型转换涉及创建副本,因此(Base)derived
不会简单地返回对derived
的引用,而是使用第一个函数。我可能遇到其他任何缺点或问题吗?
答案 0 :(得分:5)
使用static_cast<const Base&>(derived)
代替(Base)derived
。它将转发参考,并纠正重载决议。