什么" subobject"在使用static_cast描述向下转换时,在C ++标准中的含义

时间:2016-12-01 15:12:27

标签: c++ inheritance standards undefined-behavior static-cast

我已经阅读了主题Downcasting a base type,我仍然怀疑。

class Base 
{
    int i;
};

class Derived : public Base
{
};

int main()
{    
    Base* x = new Base();
    Derived* y = static_cast<Derived*>(x);

    return 0;
}

我是否理解即使这段代码已经错误并且可能导致未定义的行为?

我问它,因为我无法完全理解标准短语:

  

如果“指向cv1 B的指针”类型的右值指向的是B.   实际上是D类型的对象的子对象,结果指针   指向类型D的封闭对象。否则,结果为   演员未定义。

单词&#34; subobject&#34;困惑我。这里指针 x 指向整数 i 。但是这个整数可以被认为是一个派生对象,不是吗?因为任何Deived对象也只是一个整数。而这个整数显然是它自身的一个子对象。所以这里没有UB。

或者(如果这个推理是错误的)这个短语是否暗示我们应该总是在某处创建Derived对象?所以它应该像这里一样,例如:

Derived* z = new Derived();
// ...
// And only if the actual creation of a Derived instance
// took place somewhere the below code is ok
Base* x = z;
Derived* y = static_cast<Derived*>(x);

0 个答案:

没有答案