我有这个课程:
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&()
我无法弄清楚上述表达式的运行时开销是多少。 我认为编译器可以很容易地优化它,但是它总能做到吗?
在第一种情况下,我只是指向基类,所以我认为没有任何开销(也许编译器可以为指针添加一些偏移量)但在其他情况下我不知道什么是真的发生了。