【发布时间】:2013-07-21 23:38:10
【问题描述】:
我从 Google 阅读了几篇关于 C++ 初始化 的帖子,其中一些将我指向 StackOverflow。我从这些帖子中挑选的概念如下:
- C++初始化的顺序是:
- 零初始化;
- 静态初始化;
- 动态初始化。
- 静态对象(包括变量)首先是零初始化,然后是静态初始化。
我有几个关于初始化问题的询问(存储类问题也可能相关):
- 全局对象(没有static关键字定义)也是静态对象,对吧?
- 全局对象也像静态对象一样通过上面的两个步骤进行初始化,对吧?
- 什么是静态初始化?是否指初始化静态对象(用static关键字定义)?
- 我还读到,当执行线程第一次进入块时,使用 static 关键字在块内(即在函数中)定义的对象会被初始化!这意味着 本地静态对象 在 main 函数执行之前不会被初始化。这意味着它们没有像上面提到的两个步骤那样初始化,对吧?
-
动态初始化是指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);
}
编辑:
如果你觉得我的问题比较繁琐,可以根据上面的代码帮忙解释一下。
【问题讨论】:
-
这篇文章可能有用:bytes.com/topic/c/answers/…
标签: c++ static initialization global-variables