Информация об изменениях

Сообщение Re[3]: инициализация константных членов? от 27.02.2015 13:43

Изменено 27.02.2015 15:41 watchmaker

Здравствуйте, Honduras, Вы писали:

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>>
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;