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中提到的解决方案.使用内部带有静态变量的函数可以更好地控制顺序. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |