dynamic_cast需要虚函数吗?
Does dynamic_cast require virtual function?
例如:
class Animal
{
virtual void dummy() {}; //LINE1
}
class Cat : public Animal
{
}
Animal* a = new Cat();
if (Cat* c = dynamic_cast<Cat*> (a)) //LINE2
{
//Do something.
}
如果我从Animal类中删除LINE1(即Animal类不包含虚拟成员),LINE2将无法工作。
dynamic_cast
可以强制转换为没有虚成员的相同类或基类。但是对于向下转换或转换到void*
(它产生一个指向最派生类对象的指针),dynamic_cast
需要一个多态类,根据c++ 11§5.2.7/6:
“否则,
v
必须是指向多态类型的指针或左值”
其中v
是您提供的参数。
多态类是指具有一个或多个虚成员函数的类,§10.3/1:
声明or的类继承虚函数称为多态类。”
是的,根据标准,dynamic_cast
只能下cast多态类型(即至少具有一个虚函数的类型)
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- C++错误,隐 <function-style-cast> 式要求使用模板化类一次调用多个构造函数的多个转换
- C++ C++ 中的函数声明,键入 CAST
- 在[expr.static.cast]/4中,术语"一个可行函数"指的是什么
- 如何将双参数函数"cast"为单参数函数?
- 流输出和隐式void*cast运算符函数调用