条款1:仔细区别 pointers 和 references
- 引用应该被初始化,指针可以不被初始化。
- 不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针的要高。因为在使用引用之前不需要测试它的合法性。
- 指针与引用的另一个重要的不同是指针可以被重新赋值以指向另一个不同的对象。但是
引用则总是指向在初始化时被指定的对象,以后不能改变。
std::string s1("Nancy");
std::string s2("Clancy");
std::string& rs = s1; // rs引用s1
std::string* ps = &s1; // ps指向s1
rs = s2; // rs仍旧引用s1,但是s1的值现在是"Clancy"
条款2:最好使用C++转型操作符
这四个操作符是:static_cast、const_cast、dynamic_cast、reinterpret_cast。
- const_cast 最普通的用途就是转换掉对象的 const 属性
- dynamic_cast,它被用于安全地沿着类的继承关系向下进行类型转换。这就是说,你能用 dynamic_cast 把指向基类的指针或引用转换成指向其派生类或其兄弟类的指针或引用,而且你能知道转换是否成功。失败的转换将返回空指针(当对指针进行类型转换时)或者抛出异常(当对引用进行类型转换时)。它不能被用于缺乏虚函数的类型上。
- 如你想在没有继承关系的类型中进行转换,你可能想到 static_cast。
- reinterpret_cast,使用这个操作符的类型转换,其 的 转 换 结 果 几 乎 都 是 执 行 期 定 义 ( implementation-defined )。 因此,使用reinterpret_casts 的代码很难移植。reinterpret_casts 的最普通的用途就是在函数指针类型之间进行转换。
double result = static_cast<double>(firstNumber)/secondNumber;
参考文章:《More Effective C++》笔记_more effective c++ pdf github-CSDN博客
More Effective C++-CSDN博客?