gpt4 book ai didi

c++ - 初始化之前,C++派生类在基类上调用方法

转载 作者:行者123 更新时间:2023-12-01 14:42:49 25 4
gpt4 key购买 nike

这是一个简单的程序,我可以肯定它具有未定义的行为,但是我想确定一下。

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

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

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

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

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

最佳答案

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

Member functions (including virtual member functions, [class.virtual]) can be called for an object under construction... However, if these operations are performed in a ctor-initializer (or in a function called directly or indirectly from a ctor-initializer) before all the mem-initializers for base classes have completed, the program has undefined behavior.



该项目要点实质上包含您提供的示例代码片段,并明确指出未定义的行为。

关于c++ - 初始化之前,C++派生类在基类上调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62013510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com