Effective C++ 学习记录
来源:互联网 发布:win8垃圾清理软件 编辑:程序博客网 时间:2024/06/06 13:05
1.以by value 传递用户自定义类型通常是个坏主意,Pass-by-reference-to-const往往是比较好的选择
一、让自己习惯C++
条款02:尽量以const,enum,inline替换#define
(1)对于单纯常量,最好以const对象或enums替换#defines。
示例:
#define ASPECT_BATIO 1.653
改为
const double AspectRatio 1.653;
好处:作为一个语言常量,AspectRatio 会被编译,会进入记号表内。使用常量可能比使用#define导致较小量的目标码。
(2)对于形似函数的宏(macros),最好改用inline函数替换#defines
示例:
#define CALL_WITH_MAX(a,b) f((a)>(b)?(a):(b))
改为:
template <typename T>
inline void callWithMax(const T&a,const T& b)
{
f(a>b ? a:b);
}
好处:更加可预料,更加类型安全
条款03:尽可能使用const
(1) 将某些东西声明为const可帮助编译器侦测出错误用法。const可被施加于任何作用域内的对象、函数参数、函数返回类型、成员函数本体。
(2) 编译器强制实施bitwise constness,但你编写程序时应该使用“概念上的常量性”(conceptual constness)
(3) 当const和non-const成员函数有着实质等价的实现时,令non-const版本调用const版本可避免代码重复。
条款04:确定对象被使用前已先被初始化
C++成员初始化次序:base classes 更早于其derived classes 被初始化,而class的成员变量总是以其声明次序被初始化。
(1) 为内置型对象进行手工初始化,因为C++不保证初始化它们。
(2) 构造函数最好使用成员初值列(member initialization list),而不要在构造函数本体内使用赋值操作(assignment)。初值列
列出的成员变量,其排列次序应该和它们在class中的声明次序相同。
(3) 为免除“跨编译单元之初始化次序”问题,请以local static对象替换non-local static 对象。
- Effective STL学习记录
- Effective C++ 学习记录
- Effective C++学习记录
- Effective Java学习记录
- Effective Objective-C 2.0 学习记录(一)
- Effective Objective-C 2.0 学习记录(二)
- Effective Objective-C 2.0 学习记录(三)
- 《More Effective C++》阅读记录
- Effective Java学习记录(1)
- 《Effective C++》学习
- 《Effective C++》学习笔记
- 《Effective C++》学习笔记
- 《Effective C++》学习总结
- 《Effective C++》学习笔记
- 《Effective C++》学习笔记
- C#学习资料《Effective C#》
- 学习笔记:Effective Objective-C
- Effective Objective-C学习笔记
- LocalThread分析
- 培训管理模块
- C++常用术语及其英文翻译的含义和简单用途总结(三)
- codevs1050
- hdoj 2473 Junk-Mail Filter 【并查集的删除 】
- Effective C++ 学习记录
- Java远程调用RMI(Remote Method Invocation)
- TCP和UDP的“保护消息边界”(粘包、半包)
- JAVA基础----同步锁
- Ruby中的chop和chomp
- Slope one简单的协同过滤算法
- 杭电5285二分图染色和并查集
- 矩形面积并 POJ Atlantis
- ie浏览器前缀特殊符号的识别