More Effective C++ 条款0,1
条款0
关于编译器
不同的编译器支持C++的特性能力不同。有些编译器不支持bool
类型,此时可用 enum bool{false, true};
枚举类型来模拟bool
类型。这允许参数类型为int
和bool
的函数重载,但是这样做的缺陷是,对于内置的比较运算符,其仍返回int
类型。f(int);f(bool); f(a < b); // 会调用f(int),但其实用户期望调用f(bool)
。
但是一旦改用支持bool类型的编译器,情况可能会发生改变。另外一种方法是typedef
:
typedef int bool; const bool false = 0; const bool true = 1;
关于typedef
的详细内容->typedef|
---
条款1
指针和引用的区别
- 首先引用必须指向一个对象,并且必须赋初值,但是指针可以为空。
- 引用只能指向它最初指向的对象,不能更改。指针可以更改。
- 引用不需要担心为空的情况,但是指针必须进行空指针的检查
- 运算符重载函数,例如operator[],返回的一般是引用
vector<int> v(5); v[1] = 1; 考虑如果返回是指针,则应该写成*(v[1])= 1;
结论
当你知道你需要指向某个东西,且绝不会改变,指向其他东西,或是当你实现一个操作符而其语法需求无法由pointers达成,你就应该选择引用。任何其他时候,请采用指针。