Ale*_*tov 5 c++ constructor const undefined-behavior
请考虑以下代码:
struct Calc
{
Calc(const Arg1 & arg1, const Arg2 & arg2, /* */ const ArgN & argn) :
arg1(arg1), arg2(arg2), /* */ argn(argn),
coef1(get_coef1()), coef2(get_coef2())
{
}
int Calc1();
int Calc2();
int Calc3();
private:
const Arg1 & arg1;
const Arg2 & arg2;
// ...
const ArgN & argn;
const int coef1; // I want to use const because
const int coef2; // no modification is needed.
int get_coef1() const {
// calc coef1 using arg1, arg2, ..., argn;
// undefined behavior?
}
int get_coef2() const {
// calc coef2 using arg1, arg2, ..., argn and coef1;
// undefined behavior?
}
};
Run Code Online (Sandbox Code Playgroud)
struct Calc当我打电话时没有完全确定get_coef1,并get_coef2
是该代码有效?我可以获得UB吗?
12.6.2.8:可以为正在构建的对象调用成员函数(包括虚拟成员函数,10.3).类似地,正在构造的对象可以是typeid运算符(5.2.8)或dynamic_cast(5.2.7)的操作数.但是,如果在基类的所有mem-initializer完成之前,在ctor-initializer(或直接或间接从ctor-initializer调用的函数)中执行这些操作,则操作的结果是不确定的.
因此,您可以通过这种方式初始化类成员,但不能基类.并且,正如其他人指出的那样,如果您的函数使用了某些值,您应该知道成员初始化顺序.