随笔 - 51, 文章 - 1, 评论 - 41, 引用 - 0
数据加载中……

C++特性测试代码 —— 类成员初始化顺序

特性说明:
   C++类成员初始化顺序取决于其声明顺序,而非初始化列表的顺序。


测试代码:
/**
 * 测试类成员的初始化顺序
 * @file init_oder.cpp
 
*/
#include 
<iostream>

class Test {
public:
    Test() : mBb(sIndex
++), mAa(sIndex++) { }

public:
    
void Dump() {
        std::cout
<< "a: " << mAa << ", b: " << mBb << std::endl;
    } 

protected:
    
int mAa;
    
int mBb;

    
static int sIndex;
};

int Test::sIndex = 1;

int main() {
    Test t;
    t.Dump();
    
return 0;
}


运行及结果:
$ g++ init_order.cpp
$ .
/a.out
a: 
1, b: 2

分析风险:
当类的成员初始化有依赖关系(如某个成员的构造函数的参数是另一个成员)时,较容易出错。这是因为程序员的意图(初始化列表顺序)和程序的行为(成员声明顺序)是分离的,前者一般位于实现文件,后者位于头文件,编辑前者往往忽略后者。因此少用有依赖的初始化设计,并且在review中加入该检查条目。

posted on 2016-04-16 11:49 lemene 阅读(107) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理