對於下面的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