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种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容 ...
随机推荐
- redis(二)Redis适用场景,如何正确的使用
网络IO模型 Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络连接,接受请求后,将连接描述字pipe 传递给worker线程,进行读写IO, ...
- Django中级篇之模板语言
模板 一.引用变量 模版的创建过程,对于模版,其实就是读取模版(其中嵌套着模版标签),然后将 Model 中获取的数据插入到模版中,最后将信息返回给用户. {{ xxx }} 二.标签 用{% %} ...
- 循环链表Josephus问题(c,cpp)
问题描述: 设有n个人围坐在一个圆桌周围,现从第s个人开始报数,数到第m个的人出列,然后从出列的下一个人重新开始报数,数到第m个的人又出列,.......,如此反复直到所有的人出列为止. Joseph ...
- 学习总结 java基础
- APUE第4章 文件和目录
4.2 文件函数 #include <sys/stat.h> int stat(const char *restrict pathname, struct stat *restrict b ...
- java SimpleDateFormat
心碎了.
- java实验报告三 敏捷开发与XP
20145306 java 实验三 实验报告 实验内容 1.git下载结对同学的代码 2.修改结对同学的代码 3.实现代码重构 实验步骤 新建存储空间 git下载代码 将修改后的代码上传 上传结果 重 ...
- EnCase v7 could not recognize Chinese character folder names / file names on Linux Platform
Last week my friend brought me an evidence file duplicated from a Linux server, which distribution i ...
- leetcode 1
题目: 最开始采用暴力解法,两个for循环遍历所有组合形式,时间复杂度为O(n2),代码省略. 进一步学习,采用hash表存储,空间换时间,时间复杂度为O(n),空间复杂度为O(n); 将数组放入ha ...
- Chrome 使用技巧
阅读目录 写在前面 快速切换文件 在源代码中搜索 在源代码中快速跳转到指定的行 使用多个插入符进行选择 设备模式 设备传感仿真 格式化凌乱的js源码 颜色选择器 改变颜色格式 强制改变元素状态(方便查 ...