对象构造/初始化的顺序
Order of object construction/initialization
调用的顺序是什么?
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<的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的构造函数将被调用。
相关文章:
- lambda 作为接受其他参数的参数的初始化顺序
- 大括号或等于初始值设定项初始化顺序
- 类内初始化与构造函数初始化列表的顺序
- C++ 模板中的静态常量初始化顺序
- 如果在 C++ 构造函数中以错误的顺序初始化对象数据,会发生什么类型的错误
- 视觉C++:在 DLL 加载期间,全局变量初始化顺序是否具有确定性?
- 构造函数中没有参数的对象类成员按什么顺序初始化?
- 销毁 pthread 互斥体和 C++ 中的取消初始化顺序
- 线程局部变量的初始化顺序
- 初始化值是否保证通过其自己的地址反映,而不考虑内存顺序
- 类静态变量初始化顺序
- 具有静态存储持续时间的常量初始化变量的初始化顺序
- 解析 CRTP 初始化顺序
- 初始化相等C++的顺序
- 内联初始化的静态 const 类成员的初始化顺序保证
- 使用constexpr的全局初始化顺序
- 初始化与类类型相同的静态成员(静态初始化顺序问题)
- 结构化绑定的标识符是否按顺序初始化?
- c++中的求值顺序初始化数组
- c++标准和C语言在哪里说的是一样的:编译单元(.cpp文件)中的变量是按照声明的顺序初始化的