Sum*_*ant 2 c++ compiler-construction virtual portability
struct A {
int a;
virtual void print() {}
};
struct B : A {
int b;
virtual void print() {}
};
int main(void)
{
A *a = new B;
a[0].print(); // g++, vs2010, clang call B::print.
}
Run Code Online (Sandbox Code Playgroud)
所有三个g ++,vs2010,clang调用B :: print.几乎怀疑我的C++ 101.我的印象是使用带有对象的点不会导致动态调度.只有 - >带指针和带引号的点将导致动态调度.
所以我的问题是这段代码是否可移植?
Ker*_* SB 14
a[0]是一样的*a,并且表达是一个参考到A,和虚拟调度发生通过引用只是因为它通过指针.a->print()并(*a).print()完全相同.