Xét đoạn mã sau:Có phải hành vi không xác định trong trường hợp gọi hàm riêng trong danh sách khởi tạo không?
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?
}
};
struct Calc
không hoàn toàn được xác định khi tôi gọi get_coef1
và get_coef2
là mã này có hiệu lực? Tôi có thể nhận UB không?
Nó hoạt động ... nhưng bạn tự đặt mình lên vì sự cố. Điều gì sẽ xảy ra khi người bảo trì đến, thêm 'argZ' sau các coefs, và sau đó sử dụng' argZ' trong tính toán? Bạn sẽ có UB của bạn ... –