Si consideri il seguente codice:È un comportamento non definito nel caso delle chiamate di funzioni private nella lista di inizializzazione?
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
non è completamente definita quando chiamo get_coef1
e get_coef2
È questo il codice valido? Posso avere UB?
Funziona ... ma ti metti nei guai. Cosa succede quando arriva il manutentore, aggiungi 'argZ' dopo i coef e poi usa' argZ' nel calcolo? Avrai il tuo UB ... –