加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C静态简单类型是按顺序初始化的吗?

发布时间:2020-12-16 10:45:34 所属栏目:百科 来源:网络整理
导读:我的经验告诉我,给定一个对象: class Object{private: static int array[];public: Object(int id);};int Object::array[] = { 2937,892 };Object::Object(int id){ // do something} 数组的初始化将在调用Object上的任何方法之前发生,或者在程序中的任何其
我的经验告诉我,给定一个对象:

class Object
{
private:
    static int array[];

public:
    Object(int id);
};


int Object::array[] = { 2937,892 };


Object::Object(int id)
{
    // do something
}

数组的初始化将在调用Object上的任何方法之前发生,或者在程序中的任何其他对象上调用任何方法,无论对象是否被声明为静态.

基本上,我要问的是,是否有人不同意将可执行文件加载到内存中时初始化静态简单C类型(非对象),如char,short,int和long(以及没有由这些类型组成的构造函数的结构),在调用main()或任何其他构造函数之前?

解决方法

是的,所有静态初始化都在调用main()之前发生.但是你无法确定初始化发生的顺序.当一个静态变量依赖于另一个静态变量的存在时,这可能会造成严重破坏.它被称为静态初始化惨败: http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.14

我经常使用faq中提到的解决方案.使用内部带有静态变量的函数可以更好地控制顺序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读