条款04:确定对象被使用前已先被初始化
来源:互联网 发布:爱贝国际少儿英语 知乎 编辑:程序博客网 时间:2024/06/07 12:00
// 条款04: 确定对象被使用前已被初始化#include <iostream>#include <string>#include <list>using std::string;using std::cout;using std::endl;using std::list;class Point04 {public: int a;int b;};// 1.不要混淆了赋值(assignment)和初始化(initialization)// C++规定,对象成员变量的初始化动作发生在进入构造函数本体之前。// 编译器会为用户自定义类型的成员变量自动调用default构造函数,// 也就是说在进入ABEntry构造函数本体时间之前,这些自定义类型的成员得default构造函数// 已经被调用。但是对于内置类型,不能保证一定在赋值动作之前获得初值。class PhoneNumber {};class ABEntry {public:ABEntry(string& name, string& address, list<PhoneNumber> phones);private:string m_name;string m_address;list<PhoneNumber> m_phones;int m_num_consulted; };// 赋值// 先调用default构造函数,然后调用copy assignment操作符// ABEntry::ABEntry(string& name, string& address, list<PhoneNumber> phones) {// m_name = name; // 这些都是赋值,不是对成员变量的初始化!!// m_address = address; // 这样的做法导致首先调用default构造函数为m_name,m_address,m_phones// m_phones = phones; // 设初值,然后立即进入函数体再对它们赋予新值。// }// 初始化(用成员列表初始化)// 只用了一次copy构造函数// 这个做法效率更高,因为初始列中针对各个成员变量设的实参,// 被拿去作为各成员变量的构造函数的实参,调用构造函数时已经对各个变量进行了copy初始化// 对于内置类型例如本例中的int类型,赋值和初始化成本相同,为了一致性,也在成员列表初始化// 但是对于内置类型,如果其为const或者reference,那么它们就不能被赋值,需要初值,所以要用初始化列表ABEntry::ABEntry(string& name, string& address, list<PhoneNumber> phones): m_name(name), // 这些都是初始化,构造函数本体不必有任何动作m_address(address), // m_name以name为初值进行拷贝构造,等等m_phones(phones),m_num_consulted(0) { } // 2.总是使用成员列表进行初始化,这样做有时候绝对必要,且往往比赋值更高效// 3.C++有着十分固定的成员初始化次序,基类更早的初始化,成员变量以其声明的次序被初始化。// 4.为内置类型对象进行手工初始化,因为C++不保证初始化它们。// 5.为免除“跨编译单元只初始化次序”问题,请以local static对象替换non-localint main04() {// Point04 p1;// cout << p1.a << "&" << endl; // 错误 :uninitialized local variable 'p1' used return 0;}
阅读全文
1 0
- 条款04:确定对象被使用前已先被初始化
- 条款04:确定对象被使用前已先被初始化
- 条款04:确定对象被使用前已先被初始化
- Effective C++:条款04:确定对象被使用前已先被初始化
- [Effective C++]条款04 确定对象被使用前已先被初始化
- 条款04 确定对象被使用前已先被初始化
- 条款04:确定对象被使用前已先被初始化
- 条款04:确定对象被使用前已先被初始化
- 条款4:确定对象使用前已先被初始化
- 【Effective C++ 读书笔记】条款04:确定对象使用前已先被初始化
- 条款4:确定对象被使用前已先被初始化
- 条款4:确定对象被使用前已先被初始化
- 条款4:确定对象被使用前已先被初始化
- [effictive c++] 条款04 确定对象被使用前已被初始化
- 条款04:确定对象被使用前已被初始化
- Effective c++ 学习笔记——条款04:确定对象被使用前已先被初始化
- Effective c++ 学习笔记——条款04:确定对象被使用前已先被初始化
- 读书笔记《Effective C++》条款04:确定对象被使用前已先被初始化
- 条款03:尽可能使用const
- Java设计模式之模板方法设计模式(银行计息案例)
- 【C语言】循环添加节点(链式物理结构)
- 01背包跟完全背包问题
- maven生命周期及pom.xml解析
- 条款04:确定对象被使用前已先被初始化
- Windows7下安装与破解IntelliJ IDEA2017
- 【数据结构】中删除小写字母字符串中重复字符
- 【C语言】删除一个节点(仅一个)(单向物理链式结构)
- IntelliJ IDEA 2017激活的正确姿势
- Servlet、Struts1、Struts2、SpringMVC运行原理
- RecyclerView 中adapter.notifyDataSetChanged()无效的问题
- 条款05:了解C++默默编写并调用哪些函数
- python爬虫系列二