一兩個例外說:嚴格別名例外解釋
- AliasedType是(可能被cv修飾)DynamicType
- AliasedType和DynamicType都(可能是多層次的,有可能CV-合格每一級)指向相同類型T(因爲C++ 11)
我不清楚地理解迪菲在這些案件之間保持一致。 例如:
struct B { virtual ~B() {} };
struct D : B {};
B* b = new D;
reinterpret_cast<D*>(b);
上面的代碼是否適合這兩種情況?
據我看到AliasedType
DynamicType
和兩者都是D
(第一殼體)和它們指向相同類型D
。
如果我錯了,你能提供每個單獨案例的例子,並更清楚地解釋差異?
cppreference在這裏是錯誤的。不能'reinterpret_cast'指向派生指針的基指針或返回,然後取消引用轉換的指針,而不管對象的動態類型如何。 –
@ n.m。你能否提供任何有關標準的參考? – alexolut
6.9.2p4。「如果...,兩個對象a和b是指針可互換的。」只有第一個基類子對象被允許,並且只有當對象具有標準佈局時。 –