这是一个纯粹好奇的问题,我认为答案不会带来很大改善。
假设有这个继承树:
A
/ \
/ \
AB AC
/\ /\
ABB ABC ACB ACC
我必须编写一个基于对象类型执行不同操作的函数。 我100%确定这个对象只能是一个AC对象或它的一个子对象。
现在哪个代码更快:
int t = getObjectType();
A* obj = getObject();
switch (t) {
case 0:
ACB* casted_obj = static_cast<ACB*>(obj);
case 1:
ACC* casted_obj = static_cast<ACC*>(obj);
}
或
int t = getObjectType();
A* sup = getObject();
AC* obj = static_cast<AC*>(sup);
switch (t) {
case 0:
ACB* casted_obj = static_cast<ACB*>(obj);
case 1:
ACC* casted_obj = static_cast<ACC*>(obj);
}
可能C ++标准没有说明如何管理继承树,所以答案取决于实现。
答案 0 :(得分:2)
静态强制转换完全在编译时完成,因此性能影响始终为零。在运行时完成的唯一类型转换是dynamic_cast
。更多:http://www.cplusplus.com/doc/tutorial/typecasting/