2012年C++专家进阶之五

简介: 2012年C++专家进阶之五 C++编程的时候,用成员初始化列表的方法,来对类成员进行初始化,需要注意的问题。 哪是什么问题呢?请先看代码。 演示代码 class CTest { public:          CTest(int x);          int  m_x;...

2012C++专家进阶之五

C++编程的时候,用成员初始化列表的方法,来对类成员进行初始化,需要注意的问题。

哪是什么问题呢?请先看代码。

演示代码

class CTest {

public:

         CTest(int x);

         int  m_x;

         int  m_y;

};

CTest::CTest(int  i) : m_y(i), m_x(m_y)

{

 

}

 

int main(void)

{

CTest  test(100);

Printf(“m_x is %d, m_y is %d\n”,test.m_x,test_y);        

}

 

运行的结果是什么?

一般认为

m_x is 100, m_y is 100

大家可能错误以为上面的代码,首先会做m_y=100,然后做m_x=m_y,最后它们具有相同的值。

真实情况

编译器先初始化m_x,然后才是m_y,,因为它们是按这样的顺序声明的。导致的结果是m_x值是不可预测的。

结论:

使用初始化列表来进行C++初始化类成员,有一个重要特性,就是按照数据成员在类里的声明顺序进行初始化的,而不是按照出现在初始化列表中的顺序进行初始化

相关文章
|
编译器 C++
C++进阶之路:何为运算符重载、赋值运算符重载与前后置++重载(类与对象_中篇)
C++进阶之路:何为运算符重载、赋值运算符重载与前后置++重载(类与对象_中篇)
149 1
|
安全 算法 C语言
【C++进阶】深入STL之string:掌握高效字符串处理的关键
【C++进阶】深入STL之string:掌握高效字符串处理的关键
【C++进阶】深入STL之string:掌握高效字符串处理的关键
|
编译器 C++
C++模板进阶
C++模板进阶
106 1
|
存储 算法 程序员
【C++进阶】深入STL之 栈与队列:数据结构探索之旅
【C++进阶】深入STL之 栈与队列:数据结构探索之旅
|
算法 安全 编译器
【C++进阶】模板进阶与仿函数:C++编程中的泛型与函数式编程思想
【C++进阶】模板进阶与仿函数:C++编程中的泛型与函数式编程思想
|
存储 算法 程序员
【C++进阶】深入STL之vector:构建高效C++程序的基石
【C++进阶】深入STL之vector:构建高效C++程序的基石
|
编译器 C++
【C++进阶】深入STL之string:模拟实现走进C++字符串的世界
【C++进阶】深入STL之string:模拟实现走进C++字符串的世界
|
存储 缓存 编译器
【C++进阶】深入STL之list:模拟实现深入理解List与迭代器
【C++进阶】深入STL之list:模拟实现深入理解List与迭代器
|
C++ 容器
【C++进阶】深入STL之list:高效双向链表的使用技巧
【C++进阶】深入STL之list:高效双向链表的使用技巧
|
编译器 C++ 容器
【C++进阶】深入STL之vector:深入研究迭代器失效及拷贝问题
【C++进阶】深入STL之vector:深入研究迭代器失效及拷贝问题