c++ - 此 C++ 代码可移植吗?

标签 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.
}

所有三个 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/

相关文章:

c++ - 更改 TreeView 状态图像

c++ - 是否接受从派生 const 到非常量父类的隐式转换?

c++ - 如何将 boost 库包含到 C++ 程序中?

c# - 可以在虚方法中抛出 NotImplemented 异常吗?

C++编译器如何合成默认的拷贝构造函数

c++ - 创建局部结构的 std::vector 时出错

compiler-construction - 缺少 Visual Studio 2010 : COBOL in VS 2010,?

java - 面向对象的三地址代码生成

c++ - 基于系统架构的 C++ 中的类大小

java - 如果最终确定,公共(public) getter 和 setter 是否适用于 Android? Java 中的最终正确性与 C++ 中的常量正确性一样重要吗?