在阅读 Item 27 Minimize cast in Effective C++时,它说不要尝试使用static_cast
将*this
派生类转换为基类。因为static_cast<Base>(*this)
会创建一个基类的临时对象。我尝试了一个如下示例,但是,它始终使用不同的编译器输出 10,例如 clang 3.8 和 gcc 4.9、5.3。
我错了吗?
#include <iostream>
class A {
public:
int a;
virtual void foo() {std::cout << a << std::endl;}
};
class B : public A {
public:
int b;
void foo () { static_cast<A>(*this).foo();}
};
int main () {
B b;
b.a = 10;
b.foo();
return 0;
}
问题是为什么static_cast
会创建一个临时对象。