C++编程规范指47.以同样的顺序定义和初始化成员变量
来源:互联网 发布:单片机经典教材 编辑:程序博客网 时间:2024/05/07 04:37
摘要:
与编译器一致:成员变量初始化的顺序要与类定义中声明的顺序始终保持一致,不用考虑构造函数初始化列表中编写的顺序。要确保构造函数代码不会导致混淆地指定不同的顺序。
考虑以下代码:
<span style="font-size:18px;">class Employee{ string emall_,firstName_, lastName_;public: Employee(const char*firstName, const char* lastName) :firstName_(firstName),lastName_(lastName) ,emall_(firstName_ + "." + lastName_ + "@gmail.com"){}};</span>
这段代码隐藏着一个错误,危害性极大,而且很难发现。因为类定义中email_是在first_和last_之前被声明的,它将首先会被初始化,然后试图使用其他未初始化的字段。更糟糕的是,如果构造函数的定义位于另一个文件夹,成员变量声明的顺序对构造函数的正确性的远距离影响就更难确定了。
C++语言之所以才去这样的设计,是因为要确保销毁成员的顺序是唯一的;否则,析构函数将以不同的顺序销毁对 象,具体顺序取决于构造对象的构造函数。为此带来的底层操作开销应该是不可接受的。
解决方案是,总是按成员声明的顺序编写吃呢个月初始化语句。这样,任何非法依赖都会显而易见。当然,尽量不让一个成员的初始化依赖于其他成员更好。
许多编译器在我们违反了此条规则时会发出警告。
1 1
- C++编程规范指47.以同样的顺序定义和初始化成员变量
- C++编码器军规(004):保持类成员变量定义和初始化的顺序一致
- 成员变量的初始化顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- C语言定义结构体时注意成员变量的类型和声明顺序
- 静态vector容器成员变量的定义和初始化
- C++中的静态成员变量的定义和初始化
- Java成员变量初始化和执行顺序
- 成员变量初始化顺序
- 图的搜索算法
- matlab 同个坐标下的两个函数图像的比较
- HDU2084
- android 手机不能发短信
- 从Blue Pill、硬件虚拟化谈安全防护完备性上的一个小原则
- C++编程规范指47.以同样的顺序定义和初始化成员变量
- Matlab科学图表美化——漫画式图表
- Mysql数据库5.6.10 error 2003 hy000
- JS之时间显示问题
- Interview---一道有趣的推理题
- 资源记录(网络资源)
- linux 管道
- 错过,你才知道我的好
- wikioi 最长上升子序列题目