首页 > C/C++语言 > C/C++基本语法 > 安全的指针强制类型转换
2005
12-19

安全的指针强制类型转换

假设你打算在一个类层次诸对象的指针之间进行强制类型转换。可以在基类中编写返回 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;
}



留下一个回复