Effective C++学习笔记:初始化列表中成员列出的顺序和它们在类中声明的顺序相同
来源:互联网 发布:kali linux安装到手机 编辑:程序博客网 时间:2024/04/26 20:51
请看下面的代码:
template
class array {
public:
array(int lowbound, int highbound);
...
private:
vector
// 关于vector模板参见条款49
size_t size; // 数组中元素的数量
int lbound, hbound; // 下限,上限
};
template
array
: size(highbound - lowbound + 1),
lbound(lowbound), hbound(highbound),
data(size)
{
}
里面有个严重的错误,绝对没人会知道data里会有多少个元素。你也许认为在data之前size已经被初始化了,实则不然,类成员变量的初始化不是按照初始化表的顺序被初始化的,而是按照在类中声明的顺序被初始化的。
为什么会这样呢?我们知道,对一个对象的所有成员来说,它们的析构函数被调用的顺序总是和它们在构造函数里被创建的顺序相反。那么,如果允许上面的情况(即,成员按它们在初始化列表上出现的顺序被初始化)发生,编译器就要为每一个对象跟踪其成员初始化的顺序,以保证它们的析构函数以正确的顺序被调用。这会带来昂贵的开销。所以,为了避免这一开销,同一种类型的所有对象在创建(构造)和摧毁(析构)过程中对成员的处理顺序都是相同的,而不管成员在初始化列表中的顺序如何。
注意:上述内容不适用于static变量,static变量应该在类的构造函数前被初始化。
- Effective C++学习笔记:初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- Effective C++学习笔记:初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- Effective c++ 条款13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- effective C++笔记之条款13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- 条款13:初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- 条款 13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- 类成员是按照它们在类里被声明的顺序进行初始化的,和它们在成员初始化列表中列出的顺序没一点关系
- 11.c++-初始化列表中初始化顺序和它们在类中声明的顺序保持一致
- 在初始化列表中,成员变量的初始化顺序是其在类中声明顺序,而非列表中的顺序。
- 在初始化列表中,成员变量的初始化顺序是其在类中声明顺序,而非列表中的顺序。
- 写程序说明C++中成员函数的初始化顺序只跟在类中的声明顺序有关, 而跟初始化列表中的顺序无关
- 成员变量的初始化顺序与变量在类型中的申明顺序相同,而与它们在构造函数的初始化列表中的顺序无关
- java程序在执行过程中,类,对象以及它们成员加载、初始化的顺序如下:
- 类成员变量的初始化不是按照初始化表的顺序被初始化的,而是按照在类中声明的顺序被初始化的。
- C++ - 类的成员变量 声明顺序 与 初始化顺序 相同
- C++ - 类的成员变量 声明顺序 与 初始化顺序 相同
- 成员以其在类中声明的顺序构造
- 类的成员变量 声明顺序 决定 初始化顺序(构造函数初始化列表不影响)
- Spring集成XFire开发WebService
- 本人网站开通,www.ican.ha.cn
- DIV拖动代码
- 28 EBOOKS FOR VISUAL BASIC
- 提升JSP页面响应速度的七大秘籍绝招
- Effective C++学习笔记:初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- 读大学的意义
- Visitor模式实践
- 用CSS按比例缩放图片
- 确保帐户安全 谈MySQL数据库安全解决方案
- scanf("%s",&person[i].job)与scanf("%s",person[i].job)的区别
- 用CSS样式实现显示隐藏层方案
- Hibernate的检索策略小结
- WEB全能服务器总结