В каком порядке будут называться ctors?
template<class T>
class A {
public:
static std::function<void(void)> funcobj;
};
template<class T>
std::function<void(void)> A<T>::funcobj = [](){};
class B : public A<B> {
public:
static const int i;
B::B()
{
DoSomethingHere();
};
}inst;
std::function<void(void)> B::funcobj = [](){};
const int B::i = 2;
Я прав, что заказ будет примерно таким?
— const int B :: i -> должен быть жестко закодирован в разделе данных PE-файла и, таким образом, вообще не должен создаваться?
— ctor из std :: function для инициализации A< B> :: funcobj
— Ctor of A
— ctor из std :: function для инициализации B :: funcobj (хотя A< B> :: funcobj и B :: funcobj должны быть технически одинаковыми)
— Ctor B :: B
Сначала статические объявления будут выполнены по порядку. Так:
template<class T> std::function<void(void)> A<T>::funcobj = [](){};
std::function<void(void)> B::funcobj = [](){};
const int B::i = 2;
(если B :: я был тип объекта вместо ИНТ тогда бы его конструктор был бы назван)
Затем, когда дело доходит до инициализации переменной инст, он начнется с инициализации родительского класса, т.е. шаблон класса Аконструктор будет называться.
в конце концов класс Bконструктор будет называться.