我从 Google 阅读了几篇关于C++ 初始化的文章,其中一些将我指向 StackOverflow。我从这些帖子中挑选的概念如下:
- C++的初始化顺序是:
- 零初始化;
- 静态初始化;
- 动态初始化。
- 静态对象(包括变量)首先是Zero-initialized,然后是Static-initialized。
我有几个关于初始化问题的查询(存储类问题也可能相关):
- 全局对象(没有静态关键字定义)也是静态对象,对吧?
- 全局对象也像静态对象一样通过上面的两个步骤进行初始化,对吧?
- 什么是静态初始化?它是指初始化静态对象(用static关键字定义)吗?
- 我还读到当执行线程第一次进入块时,使用static关键字在块内(即在函数中)定义的对象被初始化!这意味着本地静态对象在主函数执行之前没有被初始化。这意味着它们没有像上面提到的两个步骤那样初始化,对吧?
- 动态初始化是指对new操作符创建的对象进行初始化,对吧?它可能指的是初始化,如
myClass obj = myClass(100);
或myClass obj = foo();
我有太多关于初始化和存储类说明符问题的查询。我阅读了 C++2003 标准文档,但找不到清晰的逻辑,因为它们分散在整个文档中。
希望你给我一个能从逻辑上解释存储类说明符和初始化的全图的答案。欢迎任何参考!
可能解释我的问题的代码:
class myClass{
public:
int i;
myClass(int j = 10): j(i){}
// other declarations
};
myClass obj1;//global scope
static myClass obj2(2);//file scope
{ //local scope
myClass obj3(3);
static myClass obj4(4);
}
编辑:
如果您认为我的问题相当乏味,您可以根据上面的代码帮助解释您的想法。