最近在看Effective  C++ ,同时将总结一下里边的重要知识点:

##########################    module  1    ##########################

                                                          让自己习惯C++

1.条款01:视C++为一个语言联邦

为了了解C++,必须了解C++的4个主要次语言:

(1)C ;

       C++ 说到底仍是以C为基础(区块,语句,预处理器,内置数据类型,数组,指针等),同时还有C语言的局限:没有模板,没有异常,没有重载……

(2)Object-Oriented C++;  <面向对象的C++>

       在这比分实现了C++的类(包括构造和析构),封装,继承,多态,虚函数等;

(3)Template C++;

       C++泛型编程,它的功能强大,给我们带来了新的编程范式;

(4)STL;

       STL是template的程序库。它对容器,迭代器,算法和函数对象进行协调和封装;

 

2.条款02:尽量以const, enum, inline 替代  #define

这个条款我们可以这样理解:宁可使用编译器替代预处理器。我们无法利用#define创建一个class专属常量,因为define并不重视作用域;这就意味着#define不仅不能用来定义class专属常量,也不能提供任何封装性;

3.条款03:尽可能使用const

(1)const成员函数

  将const实施于成员函数的目的是为了确认该成员函数可以作用于const对象身上。这一类函数很重要:其一,它们使class接口比较容易被理解。第二,它们使“操作const对象”成为可能,使提高效率。

在const阵营中有两种说法:一是成员函数只有在不更改对象之任何成员变量(static除外)才可以说是const,也就是说它不更改对象内的任何一个bit。但这种说法却不准确,可以有方法在不改变每一个bit的情况下定义为非const函数。

(2)const和非const的成员函数中避免重复

  这时可以领non-const版本调用const版本可以避免代码重复。

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

(1)因为读取未初始化的值会导致不明确的行为(为0),有时候不会。因此我们最佳的解决办法就是:永远在使用对象之前先将它初始化。对于无任何成员的内置类型,我们必须手工完成此事;

(2)C++规定,对象的成员变量的初始化动作发生在进入构造函数本体之前。这就是说初始化的发生时间更早,发生于这些成员的默认构造函数自动调用之时,这就是说较佳的写法是用初始化列表,这样效率高

   而初始化的顺序和列表中的顺序无关,和声明的次序有关;

(3)请立下这样一个规则:总是在初始化列表中列出所有的成员变量,以免遗漏一些成员变量没有初始化,如果内置类型被遗漏了,它就没有被赋初值,会引发意外的情况;

(4)在C++程序中有这样一种对象:static。记住一点:程序结束时static对象会被自动销毁,也即是它们的析构函数会在main()之后被自动调用;

(5)C++对于“定义在不同编译单元的non-local static对象”的初始化相对次序无明确的定义,这时需要手动介入。

Effiective C++ (一)的更多相关文章

  1. 《Effective C#》读书笔记

    Effiective C# Item1 : 使用属性代替成员变量 Effective C# Item2:运行时常量(readonly)优于编译时常量(const) Effective C# Item3 ...

  2. 【Java】Java 深入探讨 单例模式的实现

    在GoF的23种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容易出现问题.下面就单例设计模式详细的探讨一下.   所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在 ...

  3. 深入Java单例模式【转载】

    在GoF的23种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容易出现问题.下面就单例设计模式详细的探讨一下.   所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在 ...

  4. java中的单例模式与doublecheck

    转自: http://devbean.blog.51cto.com/448512/203501 在GoF的23种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容易出现问题.下面就单 ...

  5. [置顶] 博客停止更新 && 我的大学数年

    博客停止更新 前言: 这些天,一直还没有时间发表这篇博文,近期,做了一个决定:博客更新停止. 我有话说: 这些天来,还真是感谢大家的关注了.从2011年的07至今,2013年的07月,两个年头,写下了 ...

  6. 【转载】深入Java单例模式

    原文出处:http://devbean.blog.51cto.com/448512/203501 在GoF的23种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容易出现问题.下面就 ...

  7. java模式:深入单例模式

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://devbean.blog.51cto.com/448512/203501 在GoF ...

  8. 深入Java单例模式

    在GoF的23种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容易出现问题.下面就单例设计模式详细的探讨一下.  所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在. ...

  9. 深入Java单例模式(转)

    深入Java单例模式 源自 http://devbean.blog.51cto.com/448512/203501 在GoF的23种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容 ...

随机推荐

  1. Java虚拟机内存模型及垃圾回收监控调优

    Java虚拟机内存模型及垃圾回收监控调优 如果你想理解Java垃圾回收如果工作,那么理解JVM的内存模型就显的非常重要.今天我们就来看看JVM内存的各不同部分及如果监控和实现垃圾回收调优. JVM内存 ...

  2. Hadoop2.6.0(2.4~2.7)完全分布式搭建-入门向 新手向 详细流程

    .caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.tabl ...

  3. .net重启iis线程池和iis站点程序代码【转】

    转:http://www.jb51.net/article/44162.htm 重启站点: 复制代码代码如下:  /// <summary>        /// 根据名字重启站点.(没重 ...

  4. Add, remove, shuffle and sort

    To deal cards, we would like a method that removes a card from the deck and returns it. The list met ...

  5. 互斥对象 Mutex 和MFC中的CMutex

    互斥(Mutex)是一种用途非常广泛的内核对象.能够保证多个线程对同一共享资源的互斥访问.同临界区有些类似,只有拥有互斥对象的线程才具有访问资源的权限,由于互斥对象只有一个,因此就决定了任何情况下此共 ...

  6. Android fragment 想activity 传送数据

    fragment可以通过定义 fragment的接口的方法来 想activity传送数据: 而activity则是通过实现 fragment的接口来接收fragment的送来的数据: 1.在fragm ...

  7. a mystrious max subquence sum

    #include<cstdio>#include<cstring>const int maxn=100005;int buf[maxn];int main(){ freopen ...

  8. c# 利用 两个TREEVIEW控件完成TEENODE的鼠标拖动操作

    功能说明: 我们有两个TREEVIEW控件——TREEVIEW1,TREEVIEW2.Treeview1内有三个NODE,Treeview2内有三个NODE.将Treeview1内的NODE拖动到Tr ...

  9. asp.net常用字符串函数

    /// <summary> /// 提取字符串中的数字 /// </summary> /// <param name="str"></pa ...

  10. 数学对象Math ceil()、floor()、round()方法

      Math.ceil()   功能:对一个数进行上取整. 语法:Math.ceil(x) 参数: x:一个数值. 返回值:返回大于或等于x,并且与之最接近的整数. 注:如果x是正数,则把小数“入”: ...