假设你打算在一个类层次诸对象的指针之间进行强制类型转换。可以在基类中编写返回 NULL 的虚拟函数,在每个子类中对自身进行静态的强制类型转换。我在 Pentium 上使用 gcc 3.4.3,运行下面这个代码测试出在屏蔽掉优化的前提下,使用虚拟函数比使用 dynamic_cast 运行速度快得多:
class bar;
class mumble;
class submumble;class foo
{
public:
virtual bar *downcast_to_bar()
{ return NULL; }virtual mumble *downcast_to_mumble()
{ return NULL; }virtual submumble *downcast_to_submumble()
{ return NULL; }
};class bar : public foo
{
public:
virtual bar *downcast_to_bar()
{ return static_cast(this); }
};class mumble : public foo
{
public:
virtual mumble *downcast_to_mumble()
{ return static_cast(this); }
};class submumble : public mumble
{
virtual submumble *downcast_to_submumble()
{ return static_cast(this); }
};int main (int argc, char **argv)
{
foo *my_foo(new bar);
bar *my_bar;if (argc > 1)
{
for (long int i(1000000000); i > 0; –i)
{
my_bar = dynamic_cast(my_foo);
}
} else {
for (long int i(1000000000); i > 0; –i)
{
my_bar = my_foo->downcast_to_bar();
}
}delete my_foo;
return 0;
}
>> 本文固定链接: http://www.vcgood.com/archives/268