使用static_cast进行向下转换 - 指针和对象

Raj*_*war 2 c++ pointers casting object static-cast

说我有以下类类型

class base
{

};

class der : public base
{
};
Run Code Online (Sandbox Code Playgroud)

使用static_Cast,您可以使用对象和指针.

我试过以下 - 哪个有效(指针)

base* b = new base();
der * m = static_cast<der*>(b);
Run Code Online (Sandbox Code Playgroud)

但是以下不起作用

base b;
der m = static_cast<der>(b);
Run Code Online (Sandbox Code Playgroud)

有什么建议为什么第二个不起作用?静态转换不处理指针和对象吗?它适用于指针,但它不能与对象一起使用?

Oli*_*rth 8

在第一个,你说"我有一个指针,我保证它指向一个der,所以请你去吧".1

在第二个中,你不能做出这样的承诺,因为你毫不含糊地拥有一个base,而不是一个der.


1.当然,因为它实际上并不指向a der,所以在运行时会得到未定义的行为.

  • 你说'在第一个,你说'我有一个指针,我保证它指向一个der,所以请你去吧.".`陈述的哪一部分`der*m = static_cast <der*>(b);`陈述?因为`b`是`base`类型所以你怎么说它的类型`der`? (2认同)
  • @Rajeshwar只关注作业的右侧.`static_cast <der*>(b)`说'嘿编译器,你不确定`b`是否是指向`der`的指针(也许它是指向另一个子类`base`的指针),但是我向你保证." (2认同)