对于下面的C++程序:派生类和基类之间指针指针的转换?
class Base { };
class Child : public Base { };
int main()
{
// Normal: using child as base is allowed
Child *c = new Child();
Base *b = c;
// Double pointers: apparently can't use Child** as Base**
Child **cc = &c;
Base **bb = cc;
return 0;
}
GCC产生的最后一个赋值语句以下错误:
error: invalid conversion from ‘Child**’ to ‘Base**’
我的问题是两个部分:
- 为什么没有从子**到基**的隐式转换?
- 我可以使这个例子与C风格演员或
reinterpret_cast
工作。使用这些铸件意味着扔掉所有类型的安全。有什么我可以添加到类定义,使这些指针隐式投射,或者至少短语转换的方式,允许我使用static_cast
而不是?
许多编程语言在这个问题上的变化是SO上最常见的问题之一。但是即使对于相同的语言,每个人的用语都略有不同,因此找到重复的内容可能很困难。 – 2010-03-28 09:33:12
“固定”这个例子以避免阴影转换将取决于你为什么首先使用指针指针。 – aschepler 2012-07-24 18:52:06