最近在看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. 好文EF

    http://www.cnblogs.com/zhaopei/p/5721789.html#autoid-0-0 http://www.cnblogs.com/zhaopei/p/5746414.ht ...

  2. 慕课网-安卓工程师初养成-2-12 如何在Java中使用注释

    来源:http://www.imooc.com/code/1274 在编写程序时,经常需要添加一些注释,用以描述某段代码的作用. 一般来说,对于一份规范的程序源代码而言,注释应该占到源代码的 1/3 ...

  3. 洛谷P2751 [USACO4.2]工序安排Job Processing

    P2751 [USACO4.2]工序安排Job Processing 18通过 78提交 题目提供者该用户不存在 标签 难度普及+/提高 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 一家工 ...

  4. ASP.NET MVC4 学习系统五(Razor)

    Razor ,你好!       Razor 是一种把代码和内容进行平滑集成的语法.尽管它引入了一些新的符号和关键字,但是Razor并不是一种新的语法.相反,Razor允许用户使用已知的语言来编写代码 ...

  5. 延迟jquery,ready事件触发的时间

    $.holdReady(true);//holdReady必须在ready()方法调用之前来调用,来延迟ready()方法的执行 $(document).ready(function(){ conso ...

  6. hdu2053

    查找1-n中能整除n的数的个数. 如果是偶数的话,结果为0 奇数的话,结果为1 #include <stdio.h> int main(){ int i,cnt,n; while(~sca ...

  7. RequireJS使用及JS目录规划

    1.RequireJS学习文档: http://www.requirejs.cn/ 2.目录规划(参考:ColUdf.vm) 1)一个完整的html,对应一个js文件,模块js在主页面对应的js文件中 ...

  8. 设计模式-代理模式(Proxy)

    应用场景: 领导都有秘书,一般会代理领导的部分职能角色,处理签字.报销.开会等任务.很多新人可能都只知道秘书的存在,毕竟每天与其打交道,不知道领导的存在.但是领导的的确确是真实存在的. 场景说明: 代 ...

  9. ASP.NET内置对象一

    ASP.NET提供了大量的对象类库,在这些类库中包含了许多封装好的内置对象,我们只需要直接使用这些对象的方法和属性,就能简单快速地完成很多的功能.Request对象.Response对象和Serve对 ...

  10. 怎样在Android中ListView与ArrayAdapter配合使用

    [代码]main.xml   <?xml version="1.0" encoding="utf-8"?> <LinearLayout xml ...