C++编码器军规(004):保持类成员变量定义和初始化的顺序一致
来源:互联网 发布:山西建筑网络快报系统 编辑:程序博客网 时间:2024/05/21 22:25
军规 保持类成员变量定义和初始化的顺序一致
Always declare and initialize member variables in the same order
解读
(1)一个例子
#include <iostream>class Range{public: Range() : min_(0), max_(min_ + 10){} int GetMin() { return min_; } int GetMax() { return max_; }private: int max_; int min_;};int main(int argc, char *argv[]){ Range r; std::cout << "min_ = " << r.GetMin() << " max_ = " << r.GetMax() << std::endl; return 0;}
运行结果
min_ = 0 max_ = 12595198
程序期望的结果应该是min_=0 max_=10
实际的结果max_的值为一个很大的数值。这是因为编译器在初始化成员变量的时候是按照变量定义的顺序而不是按照类的初始化列表里面指定的顺序。在上述例子中,max_
在min_
之前被定义,而在初始化列表中, max_
在min_
之后,实际上在执行max_(min + 10)
时min_
并没有被初始化。把例子中两个变量的定义顺序颠倒后,结果如下:
min_ = 0 max_ = 10
(2)最佳实践
在用类的初始化列表来初始化成员变量时一定要按照变量定义的顺序书写初始化序列。
0 0
- C++编码器军规(004):保持类成员变量定义和初始化的顺序一致
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- C++编程规范指47.以同样的顺序定义和初始化成员变量
- Java类成员变量的初始化顺序
- java类成员变量的初始化顺序
- Java类成员变量的初始化顺序
- 成员变量的初始化顺序
- 类成员变量初始化顺序:
- 类的成员变量 声明顺序 决定 初始化顺序(构造函数初始化列表不影响)
- Fragment的生命周期
- 前沿资讯
- XMind是如何制作流程图的
- 利用classloader动态选择不同类执行
- Android String类型转换为float、double和int的工具类
- C++编码器军规(004):保持类成员变量定义和初始化的顺序一致
- redis常用命令
- Html5 Canvas 系列_绘图三(fillStyle 样式填充 矩形、墙)
- 堆跟栈
- 中文Url编码
- pragma comment的使用 pragma预处理指令详解
- JAVA RSA加解密和数字签名、DES加解密 在项目中的实际使用
- 一个促销活动并发抢标出现事故的优化经历
- mybatis#{}和${}的区别/去除生成的SQL语句的单引号