Effiective C++ (一)
最近在看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++ (一)的更多相关文章
- 《Effective C#》读书笔记
Effiective C# Item1 : 使用属性代替成员变量 Effective C# Item2:运行时常量(readonly)优于编译时常量(const) Effective C# Item3 ...
- 【Java】Java 深入探讨 单例模式的实现
在GoF的23种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容易出现问题.下面就单例设计模式详细的探讨一下. 所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在 ...
- 深入Java单例模式【转载】
在GoF的23种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容易出现问题.下面就单例设计模式详细的探讨一下. 所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在 ...
- java中的单例模式与doublecheck
转自: http://devbean.blog.51cto.com/448512/203501 在GoF的23种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容易出现问题.下面就单 ...
- [置顶] 博客停止更新 && 我的大学数年
博客停止更新 前言: 这些天,一直还没有时间发表这篇博文,近期,做了一个决定:博客更新停止. 我有话说: 这些天来,还真是感谢大家的关注了.从2011年的07至今,2013年的07月,两个年头,写下了 ...
- 【转载】深入Java单例模式
原文出处:http://devbean.blog.51cto.com/448512/203501 在GoF的23种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容易出现问题.下面就 ...
- java模式:深入单例模式
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://devbean.blog.51cto.com/448512/203501 在GoF ...
- 深入Java单例模式
在GoF的23种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容易出现问题.下面就单例设计模式详细的探讨一下. 所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在. ...
- 深入Java单例模式(转)
深入Java单例模式 源自 http://devbean.blog.51cto.com/448512/203501 在GoF的23种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容 ...
随机推荐
- Oracle 存储过程包
create or replace package body cuttoship_lots is procedure prod_run(p_w_day date) as begin delete cu ...
- Spring缓存注解@Cache使用
参考资料 http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/ http://swiftlet.net/archive ...
- UVa11054 Gergovia的酒交易 Wine trading in Gergovia-递推
https://vjudge.net/problem/UVA-11054 As you may know from the comic “Asterix and the Chieftain’s Shi ...
- 采用FLAG_ACTIVITY_CLEAR_TOP退出 多activity 或 整个程序
问题: 多activity中退出整个程序,例如从A->B->C->D,这时我需要从D直接退出程序. 网上资料:{ finish()和system(0)都只能退出单个activity. ...
- ionic 向後台請求json 數據 在頁面上的顯示問題
我向服務器請求數據,獲取到的數據竟然不能顯示在頁面上 我那個氣啊..... <ul> <!-- <li ng-repeat="phone in phones&quo ...
- ASP.NET的SEO:目录
ASP.NET的SEO:基础知识 ASP.NET的SEO:Global.asax和HttpModule中的RewritePath()方法--友好的URL ASP.NET的SEO:正则表达式 ASP.N ...
- Server2003安装SP2补丁提示密钥无效的解决方法
机器一直没有打SP2的补丁.几天要安装一个程序,还非要SP2不可.没办法.居然打补丁的时候出现了这样的错误信息: --------------------------- Service Pack 2 ...
- Oracle sqlldr使用示例
SQLLDR用于快速的批量导入数据, 示例步骤如下: 1.确定Oracle的连接示例 username/password@sid 我使用的是:system/world @ localorcl sid是 ...
- Nginx 下无法读取session 导致 thinkphp验证码错误
打开php配置文件 php.ini 使用搜索命令 whereis php.ini 一般在:/etc/php.ini 目录下 使用vim命令打开 找到: session.save_path 找到php保 ...
- JavaScript的匿名函数和模块化的使用方法
对于开发人员来说,很多时候我们都会涉及到JavaScript的使用,而在使用过程中,最令人沮丧的就是变量没有相应的使用范围. 在开发中,对于任何变量.数组.函数.对象等,只要不在函数的内部,都会被默认 ...