【发布时间】:2014-04-03 17:10:14
【问题描述】:
我最近遇到了一种情况,我必须使用 static_cast 将父类强制转换为子类,因为我知道对象实例就是那个子类。我是根据 if 条件知道这一点的。
类似这样的:
parent* foo;
child* bar;
if(foo is instance of child class)
bar = static_cast<child*>(foo)
我的问题是: 为什么 static_cast 总是需要指针?当我尝试使用非指针变量时,这不起作用。 一个例外似乎是原始数据类型。
这是因为每个指针都可以转换为 void* 吗?这就是 static_cast 的工作原理吗?
编辑:我忘了提到它适用于参考。因此,目前提出的问题是错误的。将问题重新定义为“为什么 static_cast 需要指针或引用?”
【问题讨论】:
-
请举例说明当您“尝试使用非指针变量”时什么不起作用
-
通常,必须从父级转换为子级是一种代码味道。您可能需要重新考虑您的设计。看看你是否可以使用虚拟成员函数来完成同样的事情。
-
@Dima 通常代码已经存在多年,因此重新考虑设计需要重写数千行(如果不是数万行)代码。因此,重新思考通常不是一种选择。我遇到了这个确切的问题,即 K_U 的指针和引用可以很好地转换,但是转换非指针变量不会在无法重新考虑或重写的代码上编译。我希望 SO 上的某个人能为这个主题提供一些启示。
-
@K_U 看看stackoverflow.com/questions/53294643/…。至少对我有帮助。
标签: c++ pointers casting static-cast