Effective C++ 读书笔记(二)
2017-05-05 16:05
393 查看
Effective C++ 读书笔记(二)
版权声明:本文为 cheng-zhi 原创文章,可以随意转载,但必须在明确位置注明出处!设计与声明 - 条款 20
宁以 pass-by-reference-to-const 替换 pass-by-value函数的参数如果是自定义的对象类型,则最好定义为 pass-by-reference-to-const ,内置类型(int,double …)除外。
不建议下面的做法:
/* Student为自定义类型,但却直接按照默认的 pass-by-value 的方式传递 */ void function(Student s);
缺点:
1.会导致自定义类型的构造函数和析构函数多次被调用,当自定义类型的构造函数和析构函数比较费时的时候,效率比较底下。
2.在传递派生类时容易产生对象被切割的问题。
建议的做法:
/* 传递对象的引用 */ void function(const Student& s);
优点:
1.可以回避自定义类型的构造和析构函数的调用,不会影响效率。
2.不会产生对象切割问题,因为引用的底层其实就是指针,在内存中只有一份实例。
原则:
1.如果可以的话,尽量传递 const 的引用作为函数的参数。
2.不要将这个条款应用在内置类型上,对于内置类型,pass-by-value更适合。
实现 - 条款 27
尽量少做转型动作尽可能少的在代码中进行转型,如果避免不了,在 C++ 中应该抛弃旧式 C 类型的转型,而使用新式转型。
旧式转型
表达式风格:(T)expression 函数风格 :T(expression)
新式转型
/* static_cast比较常用 */ static_cast<T>(expression) const_cast<T>(expression) dynamic_cast<T>(expression) reinterpret_cast<T>(expression)
新式转型示例
int x = 1; /* 旧式转型 */ double d1 = (double)x; /* 新式转型 */ double d2 = static_cast<double> x;
原则
1.尽量避免转型。
2.将转型隐藏在接口内部,不要暴露给客户。
3.抛弃旧式转型,使用新式转型。
About Me
cheng-zhi:C / C++Github:cheng-zhi
个人主页:cheng-zhi
相关文章推荐
- 读书笔记《Effective c++》 条款05 了解c++默默编写并调用哪些函数
- 读书笔记《Effective c++》 条款16 成对使用new和delete时要采用相同形式
- effective C++ 读书笔记(上)
- Effective c++ 读书笔记
- Effective C++ 读书笔记(10)
- Effective C++ 读书笔记(23)
- effective C++(第三版)读书笔记一——条款二:尽量以const,enum,inline替换#define
- effective C++ 读书笔记(4)
- 读书笔记《Effective C++》条款07:为多态基类声明virtual析构函数
- 读书笔记《Effective C++》条款21:必须返回对象时,别妄想返回其reference
- 读书笔记《Effective C++》条款38:通过复合塑模出has-a或“根据某物实现出”
- 【读书笔记】Effective C++——0 导读
- 【读书笔记】Effective C++-2 构造/析构/赋值运算(之二)
- Effective C++ 3rd 读书笔记
- 《Effective C++》第1章 让自己习惯C++-读书笔记
- Effective C++ 读书笔记——尽量以const,enum,inline替换 #define
- 《Effective C++》读书笔记之item49:了解new-handler的行为
- Effective C++ 读书笔记 条款一至三
- 《Effective C++(第三版)》读书笔记
- effective C++ 04_确定对象被使用前已被初始化 读书笔记