繁体   English   中英

C++ 派生的 class 在初始化之前调用基础 class 上的方法

[英]C++ derived class calls method on base class before initialization

这是一个简单的程序,我很确定它有未定义的行为,但我想确定。

struct A {
  int x;
  A(int y):x(y) {}
  int foo() { return x; }
};

struct B : public A {
  B():A(foo()) {}
};

我假设这具有未定义的行为,因为对A::foo的调用发生在构造A object 之前,它读取了一个未初始化的 class 变量。

但是,如果A::foo的实现更改为{ return 0; } { return 0; }而不是{ return x; } ,即{ return x; }不访问 class 成员,它仍然是未定义的行为吗?

进一步的问题 - 如果A::foovirtual的,有什么改变吗?

class.base.init中所指定,这在两种情况下都是未定义的行为(包括虚拟成员函数):

可以为正在构建的 object 调用成员函数(包括虚拟成员函数,[class.virtual])......但是,如果这些操作在 ctor-initializer 中执行(或在 function 中直接或间接从 ctor-初始化程序)在基类的所有内存初始化程序完成之前,程序具有未定义的行为。

此要点基本上包含您提供的示例代码片段,并明确指出未定义的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM