我写了几行我认为不应该编译的代码。我在指向基类对象的静态转换指针上调用派生类的方法,如下所示:
class B {};
class D: public B
{
public:
void bar() { printf("%d\n", m_i); }
private:
int m_i;
};
int main()
{
B b;
D* d = static_cast<D*>(&b);
d->bar();
return 0;
}
打印的值显然是垃圾,但这是否应该编译?如何gcc
做到这一点?