Это законно. Если у вас есть
struct foo
{
int a;
int b;
int c;
foo() : a(1), b(a + 1), c(b + 1) {}
};
Тогда это нормально. Причина в том, что a
объявлено в классе до b
, а b
объявлено до c
. Все члены класса инициализируются в том порядке, в котором они объявлены в классе, так что вы даже можете получить
struct foo
{
int a;
int b;
int c;
foo() : c(b + 1), b(a + 1), a(1) {}
};
и с тобой все будет в порядке. Если бы у вас было
struct foo
{
int b;
int c;
int a;
foo() : a(1), b(a + 1), c(b + 1) {}
};
с другой стороны, b
и c
будут инициализированы с неопределенным значением, и их использование будет неопределенным поведением.