K_U*_*K_U 1 c++ pointers casting static-cast
我最近有一种情况,我不得不使用static_cast将父类强制转换为子类,因为我知道对象实例是那个子类.我基于if条件知道这一点.
像这样的东西:
parent* foo;
child* bar;
if(foo is instance of child class)
bar = static_cast<child*>(foo)
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么static_cast总是需要指针?当我用非指针变量尝试它时,这不起作用.一个例外似乎是原始数据类型.
这是因为每个指针都可以转换为void*吗?这是static_cast的工作原理吗?
编辑:我忘了提到它适用于参考.因此,目前陷害的问题是错误的.重新定义问题"为什么static_cast需要指针或引用?"
为什么static_cast总是需要指针?
运算符static_cast不需要指针,也不需要引用.
C++标准版n3337§5.2.9/ 4:
否则,如果声明,则可以 使用表单的static_cast将表达式e显式转换为类型T. 是良好的形成
static_cast<T>(e)T t(e),对于某些发明临时变量t(8.5).这种显式转换的效果与执行声明和初始化,然后使用临时变量作为转换结果相同.当且仅当初始化将其用作glvalue时,表达式e用作glvalue.
parent* foo;
child* bar;
if(foo is instance of child class)
bar = static_cast<child*>(foo)
Run Code Online (Sandbox Code Playgroud)
当我用非指针变量尝试它时,这不起作用.
例如?你是怎么试的?如果你的意思是
child c;
parent p = static_cast<parent>( c);
Run Code Online (Sandbox Code Playgroud)
那么这被称为切片,这意味着p只会从c来自父类的c获取那些数据(类父类的对象如何也接收到子部分,因为child是对派生父数据的补充?).