static_cast开销到基类和该类的成员

时间:2015-08-31 09:04:56

标签: c++ performance overhead static-cast

我有这个课程:

class A{};
class B
{
public:
    A* ptr_obj;
    A obj;
    operator A*&()
    {
         return ptr_obj;
    }
    operator A&()
    {
         return obj;
    }
};
class C : public B {};

现在我有一个指向类型为C的obj的指针

C* ptr_c;

还有另外两个指针,一个是B型,另一个是A型

B* ptr_b;
A* ptr_a;

我想投射ptr_c并将其分配给ptr_a和ptr_b:

ptr_b = static_cast<B*>(ptr_c);
ptr_a = static_cast<A*>(*ptr_c); //calls B::operator A*&()
ptr_a = &static_cast<A>(*ptr_c); //calls B::operator A&()

我无法弄清楚上述表达式的运行时开销是多少。 我认为编译器可以很容易地优化它,但是它总能做到吗?

在第一种情况下,我只是指向基类,所以我认为没有任何开销(也许编译器可以为指针添加一些偏移量)但在其他情况下我不知道什么是真的发生了。

0 个答案:

没有答案