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++初始化类成员,有一个重要特性,就是按照数据成员在类里的声明顺序进行初始化的,而不是按照出现在初始化列表中的顺序进行初始化

相关文章
|
1月前
|
存储 C++ 容器
C++进阶--mep和set的模拟实现
C++进阶--mep和set的模拟实现
|
1月前
|
测试技术 C++
C++进阶--红黑树
C++进阶--红黑树
|
2天前
|
设计模式 C语言 C++
【C++进阶(六)】STL大法--栈和队列深度剖析&优先级队列&适配器原理
【C++进阶(六)】STL大法--栈和队列深度剖析&优先级队列&适配器原理
|
2天前
|
存储 缓存 编译器
【C++进阶(五)】STL大法--list模拟实现以及list和vector的对比
【C++进阶(五)】STL大法--list模拟实现以及list和vector的对比
|
2天前
|
算法 C++ 容器
【C++进阶(四)】STL大法--list深度剖析&list迭代器问题探讨
【C++进阶(四)】STL大法--list深度剖析&list迭代器问题探讨
|
2天前
|
编译器 C++
【C++进阶(三)】STL大法--vector迭代器失效&深浅拷贝问题剖析
【C++进阶(三)】STL大法--vector迭代器失效&深浅拷贝问题剖析
|
1月前
|
算法 安全 编译器
C++:模版进阶 | Priority_queue的模拟实现
C++:模版进阶 | Priority_queue的模拟实现
|
1月前
|
存储 算法 数据管理
【C++入门到精通】C++入门 ——搜索二叉树(二叉树进阶)
在C++中,本文介绍了搜索二叉树(二叉搜索树,BST)的概念和基本操作,包括搜索、插入和删除。搜索操作从根节点开始,按值大小决定左右查找;插入操作找到合适位置新建节点;删除操作需考虑无子节点、单子节点和双子节点的情况。文中还提供了非递归和递归实现的C++代码示例。此外,讨论了搜索二叉树在K模型和KV模型中的应用以及性能分析,强调了保持树平衡的重要性。
15 0
|
1月前
|
存储 安全 程序员
【C++ 包装器类 智能指针】完全教程:std::unique_ptr、std::shared_ptr、std::weak_ptr的用法解析与优化 — 初学者至进阶指南
【C++ 包装器类 智能指针】完全教程:std::unique_ptr、std::shared_ptr、std::weak_ptr的用法解析与优化 — 初学者至进阶指南
71 0
|
1月前
|
存储 C++
C++进阶--AVL树
C++进阶--AVL树