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.
}
所有三个 g++、vs2010、clang 调用 B::print。几乎怀疑我的 C++ 101。我的印象是对对象使用点不会导致动态调度。只有 -> 带有指针和带有引用的点将导致动态调度。
所以我的问题是这段代码是否可移植?
最佳答案
a[0]
与 *a
相同,该表达式是对 A
的引用>,并且虚拟分派(dispatch)通过引用发生,就像它通过指针发生的一样。 a->print()
和 (*a).print()
完全相同。
关于c++ - 此 C++ 代码可移植吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8840637/