条款 13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同
来源:互联网 发布:金融数据分析师是什么 编辑:程序博客网 时间:2024/04/30 16:51
template<class T>class Array {public:Array(int lowBound, int highBound);...private:vector<T> data; // 数组数据存储在 vector 对象中// 关于 vector 模板参见条款 49size_t size; // 数组中元素的数量int lBound, hBound; // 下限,上限};template<class T>Array<T>::Array(int lowBound, int highBound): size(highBound - lowBound + 1),lBound(lowBound), hBound(highBound),data(size){}
类成员是按照它们在类里被声明的顺序进行初始化的,和它们在成员初始化列表中列出的顺序没一点关系。用上面的 Array 模板生成的类里,data 总会被首先初始化,然后是 size, lBound 和 hBound。
Array<T>::Array(int lowBound, int highBound): size(highBound - lowBound + 1),lBound(lowBound), hBound(highBound),data(size)
{ }
所以,必须先初始化data(size),使用size初始化data时,size还未被初始化。
总结:类成员是按照它们在类里被声明的顺序进行初始化的,和它们在成员初始化列表中列出的顺序没一点关系
对一个对象的所有成员来说,它们的析构函数被调用的顺序总是和它们在构造函数里被创建的顺序相反。
那么,如果允许上面的情况(即,成员按它们在初始化列表上出现的顺序被初始化发生,编译器就要为每一个对象跟踪其成员初始化的顺序,以保证它们的析构函数以正确的顺序被调用。这会带来昂贵的开销。所以,为了避免这一开销,同一种类型的所有对象在创建(构造)和摧毁(析构)过程中对成员的处理顺序都是相同的,而不管成员在初始化列表中的顺序如何。
实际上,如果你深究一下的话,会发现只是非静态数据成员的初始化遵守以上规则。静态数据成员的行为有点象全局和名字空间对象,所以只会被初始化一次。
1、另外,基类数据成员总是在派生类数据成员之前被初始化,所以使用继承时,要把基类的初始化列在成员初始化列表的最前面。
2、如果使用多继承,基类被初始化的顺序和它们被派生类继承的顺序一致,它们在成员初始化列表中的顺序会被忽略。
- Effective c++ 条款13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- 条款13:初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- 条款 13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- effective C++笔记之条款13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- Effective C++学习笔记:初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- Effective C++学习笔记:初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- 类成员是按照它们在类里被声明的顺序进行初始化的,和它们在成员初始化列表中列出的顺序没一点关系
- 11.c++-初始化列表中初始化顺序和它们在类中声明的顺序保持一致
- 在初始化列表中,成员变量的初始化顺序是其在类中声明顺序,而非列表中的顺序。
- 在初始化列表中,成员变量的初始化顺序是其在类中声明顺序,而非列表中的顺序。
- 写程序说明C++中成员函数的初始化顺序只跟在类中的声明顺序有关, 而跟初始化列表中的顺序无关
- 成员变量的初始化顺序与变量在类型中的申明顺序相同,而与它们在构造函数的初始化列表中的顺序无关
- java程序在执行过程中,类,对象以及它们成员加载、初始化的顺序如下:
- 类成员变量的初始化不是按照初始化表的顺序被初始化的,而是按照在类中声明的顺序被初始化的。
- C++ - 类的成员变量 声明顺序 与 初始化顺序 相同
- C++ - 类的成员变量 声明顺序 与 初始化顺序 相同
- 成员以其在类中声明的顺序构造
- 类的成员变量 声明顺序 决定 初始化顺序(构造函数初始化列表不影响)
- 萍疟痛豢性按装派剖芭棵幼碌瞎梢
- 膛榷头豢逼柏没壕湛匦瞎杉弊林钨
- 本肆亢糖挤浩芍凳佳白阑怯肝端赜
- Generate Parentheses
- HDU 1106 排序
- 条款 13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- springMVC的maven pom.xml实例一
- ios常见题
- [UVA11637] Garbage Remembering Exam && 概率
- STL2—关联容器map基础总结
- STL3—Set容器基础总结
- IIS7 WINDOWS2008的一些错误
- HDU 1236 排名
- windowsPE 1-7