Сообщение Re[3]: инициализация константных членов? от 27.02.2015 13:43
Изменено 27.02.2015 15:41 watchmaker
Здравствуйте, Honduras, Вы писали:
H>Здравствуйте, watchmaker, Вы писали:
W>>
H>скобки круглые.
В данном случае можно и круглые. Но и фигурные подходят.
H>ЗЫ тоесть с++11 ничего нового в этом смысле не появилось.
Появилось. Но у тебя в классах Cl1 и Cl2 есть нетривиальные конструкторы. Если бы их не было, или бы они были contstexpr, то можно было сразу по месту инициализацию написать. Например:
H>Здравствуйте, watchmaker, Вы писали:
W>>
W>>const Cl1 A::m1{A::i0};
W>>
H>скобки круглые.
В данном случае можно и круглые. Но и фигурные подходят.
H>ЗЫ тоесть с++11 ничего нового в этом смысле не появилось.
Появилось. Но у тебя в классах Cl1 и Cl2 есть нетривиальные конструкторы. Если бы их не было, или бы они были contstexpr, то можно было сразу по месту инициализацию написать. Например:
struct Cl1{ constexpr Cl1(int) {} };
struct Cl2{ int u; Cl1 v; };
struct A
{
static const int i0=0;
static constexpr Cl1 m1{i0};
static constexpr Cl2 m2{i0, m1};
};
constexpr Cl1 A::m1;
constexpr Cl2 A::m2;
Re[3]: инициализация константных членов?
Здравствуйте, Honduras, Вы писали:
H>Здравствуйте, watchmaker, Вы писали:
W>>
H>скобки круглые.
В данном случае можно и круглые. Но и фигурные подходят.
H>А про последовательность инициализаций что нибудь гарантировано?
Да:
H>ЗЫ тоесть с++11 ничего нового в этом смысле не появилось.
Появилось. Но у тебя в классах Cl1 и Cl2 есть нетривиальные конструкторы. Если бы их не было, или бы они были contstexpr, то можно было сразу по месту инициализацию написать. Например:
H>Здравствуйте, watchmaker, Вы писали:
W>>
W>>const Cl1 A::m1{A::i0};
W>>
H>скобки круглые.
В данном случае можно и круглые. Но и фигурные подходят.
H>А про последовательность инициализаций что нибудь гарантировано?
Да:
Static data members are initialized and destroyed exactly like non-local variables
H>ЗЫ тоесть с++11 ничего нового в этом смысле не появилось.
Появилось. Но у тебя в классах Cl1 и Cl2 есть нетривиальные конструкторы. Если бы их не было, или бы они были contstexpr, то можно было сразу по месту инициализацию написать. Например:
struct Cl1{ constexpr Cl1(int) {} };
struct Cl2{ int u; Cl1 v; };
struct A
{
static const int i0=0;
static constexpr Cl1 m1{i0};
static constexpr Cl2 m2{i0, m1};
};
constexpr Cl1 A::m1;
constexpr Cl2 A::m2;