对象构造/初始化的顺序

Order of object construction/initialization

本文关键字:顺序 初始化 对象      更新时间:2023-10-16

调用的顺序是什么?

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文件的数据部分,因此根本不需要构造?
用于初始化A&lt的std::函数的actor;B>:: funcobj
- A
-用于初始化B::funcobj(尽管A::funcobj和B::funcobj在技术上应该是相同的)
-

首先,静态声明将按顺序执行。所以:

template<class T> std::function<void(void)> A<T>::funcobj = [](){};
std::function<void(void)> B::funcobj = [](){};
const int B::i = 2;

(如果B::i是对象类型,而不是int,那么它的构造函数将被调用)

当初始化变量inst时,它将首先初始化父类,即模板类A的构造函数将被调用。

finally 类B的构造函数将被调用。