`
nathan09
  • 浏览: 144667 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

【读书笔记】Effective C++-1 让自己习惯C++(之三)

 
阅读更多

Effective C++读书笔记

--By Nathan.Yu 2007-11-12--

1 让自己习惯C++()

条款04:确定对象被使用前已先被初始化

读取未初始化的值会导致不明确的行为。

最佳的处理方法:永远在使用对象之前先将它初始化。

对内置类型:手工初始化。

对自定义类型:确保每个构造函数都将对象的每一个成员初始化。

别混淆了赋值(assignment)和初始化(initialization)。

1、 成员初始化何时发生?

C++规定,对象的成员变量的初始化发生在进入构造函数本体之前。使用member initialization list(成员初值列表)替换在构造函数体中的赋值动作。

2、 为什么使用初始化列表效率较高?

初始化列表避免了先调用成员的default构造函数这一多余的过程。

3、 内置类型成员应选用初始化列表还是赋值进行初始化?

内置类型的“赋值表现像初始化一样好”,但为了一致,最好也通过成员初始列表来初始化内置类型。

【要点摘录】请立下规则:规定总是在初值列表中列出所有成员变量,以免还得记得哪些成员变量(如果它们在初值列表中被遗漏的话)可以无需初值。

4、 何时内置类型成员变量必须使用初值列表初始化?

当它们是constreferences时,它们就一定需要初值,不能被赋值。

5、 有多个构造函数,且成员较多时怎么办?如何初始化?

在这种情况下,可以合理的在初值列表中遗漏那些“赋值表现像初始化一样好”对成员,改用它们的赋值操作,并将那些赋值操作移往某个函数(通常是private),共所有构造函数调用。这种做法在“成员变量的初值系由文件或数据库读入”时特别有用。

6、 成员的初始化顺序如何?

C++有十分固定的初始化次序:base classes更早于其derived classes被初始化,而classes当成员变量总是以其声明的次序初始化。

【要点摘录】为避免你或你的检阅者迷惑,并避免某些可能存在的晦涩的错误,当你在初始化列表中以声明的次序初始化各成员。

7、 static对象有哪些?

所谓static对象,其寿命从被构造出来直到程序结束为止,因此stackheap对象都被排除。这种对象包括:global对象;定义于namespace作用域内的对象;在classes内、在函数内、以及在file作用域内被声明为static的对象。其中,函数中的static对象称为local static对象,其他static对象称为non-local static对象。static对象的析构函数会在main函数结束时被自动调用。

8、 什么是编译单元?

所谓编译单元(translation unit),是指产出单一目标文件的那些源码。基本上它是单一源码文件加上其所含入的头文件。

【要点摘录】C++对“定义于不同编译单元内的non-local static对象”的初始化次序并无明确定义。

【要点摘录】C++保证,函数内的local static对象在“该函数被调用期间”“首次遇上该对象之定义式”时被初始化。

请记住:

1、为内置型对象进行手工初始化,因为C++不保证初始化它们。

2、构造函数最好使用成员初值列表,而不要在构造函数体内使用赋值操作。初值列表列出的成员变量,其排列次序该和它们在class中的声明次序相同。

3、为免除“跨编译单元之初始化次序”问题,请以local static对象替换non-local static 对象。(使用reference-returning函数)。

分享到:
评论

相关推荐

    effective c++读书笔记

    effective c++读书笔记和总结 effective c++读书笔记和总结

    effective C++读书笔记

    effective C++读书笔记,effective C++读书笔记,effective C++读书笔记

    effective C++ 读书笔记

    effective C++ 很好 很不错 最好的C++进阶资料

    Effective Modern C++学习笔记

    《Effective Modern C++:改善C++11和C++14的42个具体做法(影印版)(英文版)》中包括以下主题:剖析花括号初始化、noexcept规范、完美转发、智能指针make函数的优缺点;讲解std∷move,std∷forward,rvalue引用和全局...

    Effective C++第三版及详细笔记

    内容简介:有人说C++程序员可以分为两类,读过Effective C++的和没读过的。当您读过《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)》之后,就获得了迅速提升自己C++功力的一个契机。

    Effective C++学习笔记

    Effective C++学习笔记 没有时间看Effictive C++书的人可以看看这个笔记 总结出了重点啊 适合有c++基础的人阅读

    effective c++笔记1

    effective c++笔记1

    Effective C++笔记1

    Effective C++笔记1

    effective C++ 读书笔记 PPT

    摘录了《Effective C++》 (Scott Meyers 著)中有参考价值的编写代码建议,方面阅读

    Effective C++学习笔记.doc

    自己整理的侯捷版本<<Effective C++ 改善程序与设计的55个具体做法>> 学习笔记.

    Effective_C++_3rd笔记.pdf

    Effective_C++_3rd 读书笔记 pdf

    Effective C++ Roy T 读书笔记。

    Effective C++ Roy T 读书笔记,比较老的一本书,探讨一下C++。

    C++Effective STL笔记

    C++ Effective STL笔记,供C++初学者学习参考。。。。。

    effective C++ (3rd) 学习笔记

    经典书籍 effective c++的学习笔记,一共31页,总结的很好,基本上是把原书的精华内容再加上自己的理解写在了这份文档中,适合打印出来细看。

    Effective_C++_笔记

    通常C++要求你对所使用的任何东西提供一个定义式,但如果它是个class专属常量 又是static且为整数类型(integral type,例如int,char,bool),则可特殊处理。只要不取它们 的地址,你可以声明并使用它们而无需提供...

    C++书籍阅读笔记

    深入探索C++对象模型,Effective STL,more effective c++,C陷阱与缺陷,都是阅读笔记

    c++笔记学习心得笔记

    c++笔记学习心得笔记,年多的C++学习过程中,自己阅读了很多C++经典著作,有《effective c++》,《more effective c++》,《c++ primer》等,每次阅读著作都会总结一些心得,现在拿出来和大家分享一下。

    Effective C++中文版

    Effective C++_中文版. 数据C++中的高级进阶类书籍,本文档可以复制,非影印版

Global site tag (gtag.js) - Google Analytics