Effective C++ --1 让自己习惯C++
来源:互联网 发布:php的特点与优势 编辑:程序博客网 时间:2024/06/16 05:36
1、视C++为一个语言联邦
C++主要的次语言有四种:C、Object-Oriented C++、Template C++和STL。
2、尽量以const,enum,inline替换#define
(1) #define单纯常量,编译前需要预处理器,没有进入编译的符号表,出错信息不容易定位。
(2) #define 不能用于定义常量指针,对const取地址合法,对#define取地址不合法;没有作用域的限制,不能成为类的专属成员。
(3) #define 定义宏,括号问题,容易出错,应以inline代替。
补充:后在《c和指针》中看到一些 #define 不能用函数替换的情况,但是在C++中都不是问题:
(1) 函数的参数必须声明为一种特定的类型,所以只适合在类型合适的表达式上使用。如果用模板,函数也可以实现多种类型,C++模板有类型推导同样不需要进行显示表明。
(2) 宏的参数如果是一种类型,无法作为函数参数传递。
在C++中,可以用typeid(X).name()获知变量的类型,或者使用模板,在模板函数中定义此类型变量等。
3、尽可能使用const
(1) 将函数的返回值声明为const可以防止被当做左值被赋值。
(2)成员函数const有两种理解,bitwise constness和logical constness。前者主张const成员函数不更改对象之任何成员变量,也即不更改对象内的任何一个bit;后者主张const成员函数可以修改所处理的对象内的某些bits,但只有在客户端侦测不出的情况下。前者对象内指针所指之物发生变化亦可,后者要添加mutable来表示对象成员可以改变。
(3)“常量性转移”,令non-const版本调用const版本来避免代码重复。
4、确定对象被使用前已先被初始化
(1) 内置类型手工初始化;非内置类型构造函数初始化时利用初始化列表,使成员变量初始化发生在进入构造函数之前,此时调用的是拷贝构造函数,而非调用默认构造函数再进行拷贝赋值,这样可以提高效率。
(2) 成员变量初始化次序与声明次序相同。
(3)c++定义于不同编译单元内的non-local static对象的初始化次序没有明确定义,为此,以local static对象替换为non-local static对象。
- 《Effective C++》1-让自己习惯C++
- 【读书笔记】Effective C++-1 让自己习惯C++(之一)
- 【读书笔记】Effective C++-1 让自己习惯C++(之二)
- 【读书笔记】Effective C++-1 让自己习惯C++(之三)
- 《Effective C++》让自己习惯C++:条款1-条款4
- Effective C++(一)让自己习惯C++
- Effective C++(一)让自己习惯C++
- effective c++-让自己习惯c++
- 《Effective C++》第一章:让自己习惯C++
- Effective C++读书笔记1(让自己习惯C++)
- Effective C++读书笔记1(让自己习惯C++)
- <<Effective C++>>读书笔记1: 让自己习惯C++
- Effective C++(一)让自己习惯C++
- 《Effective C++》 读书笔记(一) 让自己习惯C++
- 【Effective C++】条款01-让自己习惯c++
- Effective C++ 第一章(让自己习惯C++)
- Effective C++学习笔记一(让自己习惯C++)
- Effective C++ — 让自己习惯C++(一)
- 树莓派引脚远程控制
- String/StringBuffer/StringBuilder
- FFMPEG结构体分析:AVCodecContext
- leveldb简介
- Detecting and Probing the Camera(检测,探测相机)
- Effective C++ --1 让自己习惯C++
- Apache POI库操作Excel 2007文档
- RESTful架构风格
- Wb开发基础-Http1.0协议-客户端与服务器端的交互
- c语言与变量
- Android---控制多媒体应用程序的音量和播放
- How to get a path to a resource in a Java JAR file
- java中double类型变量保留小数点后两位的问题
- 轻松使用Hadoop RPC