more effective c++基础议题
来源:互联网 发布:linux命令面试题及答案 编辑:程序博客网 时间:2024/05/22 15:45
条款一:区别引用和指针
1.不能引用空(比指针效率高,不必测试空)
2.引用总是指向最初获取的那个对象(不变性)
3.某些操作符按其语法需求,无法由指针完成,就应选择引用。(某些语法需求)
比如重载 operator[ ]
vector<int> v(10);
v[5] = 10; // 返回值是引用
如果返回值是指针,则 *v[5] = 10; // 不符合正常操作
其他情况,用指针吧
----------------------------------------------------------------------------------------------
条款二:最好使用C++转型操作符
static_cast / const_cast / dynamic_cast / reinterpret_cast
1.一般转化 用static_cast
2.去常限制 用const_cast
3.(逻辑)继承体系转化 dynamic_cast / static_cast
优先使用dynamic_cast (父-->子)
原因:1.安全(不成功返回空)
2.类型必须要有虚函数
dynamic_cast”:“Base”不是多态类型
4.(物理)二进制级转化 用reinterpret_cast
reinterpret_cast是为了映射到一个完全不同类型的意思,这个关键词在我们需要把类
型映射回原有类型时用到它。我们映射到的类型仅仅是为了故弄玄虚和其他目的,
这是所有映射中最危险的。(这句话是C++编程思想中的原话)
char *pc = "hello";
int *pn = reinterpret_cast<int*>(pc);
C的转型,在类中也是逻辑的,但是不是动态的,如 C 继承 A,B, 把A转化成B,C的转型就不如dynamic_cast灵活和动态。static_cast会编译出错
尽量少使用转型!
举例(逻辑与物理)
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
条款三:不要以多态方式使用数组
Base array[10]
Derived array2[10]
void printArray(const Base *array, int n) {
for (int i = 0; i < n; i++)
cout << array[i] << endl;
}
或者通过Base指针删除Derived objects组成的数组
Base *pB = new Derived[10];
void deleteArray(Base *array) { delete [ ] array; }
多态和指针算数不能混用!
具体类不要继承另一个具体类。
----------------------------------------------------------------------------------------------
条款四:非必要不提供默认构造函数
缺乏默认构造函数会带来一些束缚:
1. Base array[10].将不能成功
2.对于许多基于模板的容器,要求目标类型必须有默认构造函数
那我需要刻意提供一个吗?如 Base(int num = UNSPECIFIED)
没必要,反而增加判断,影响程序效率。
可以存指针,再开辟空间。(为了节省空间开销,可以使用定位new,但是要注意删除的格式。
大部分情况下,如果谨慎设计template,可以消除对default constructor的需求,如vector.
- 《More Effective C++》读书笔记-基础议题
- <<More Effective C++>>读书笔记1: 基础议题
- More Effective(一)基础议题
- more effective c++基础议题
- 《More Effective C++》重点摘要一:基础议题
- More Effective C++读书笔记---基础议题
- More Effective C++ 第一部分 基础议题
- More Effective C++总结(1):基础议题
- 【more effective c++读书笔记】【第1章】基础议题(1)
- 【more effective c++读书笔记】【第1章】基础议题(2)
- More Effective C++学习笔记(1)-基础议题
- More Effective C++ 读书摘要(一、基础议题 二、运算符)Item1 - 8
- 读书笔记: More Effective C++ 基础议题,条款1到条款4
- more effective c++使用条款(一)—— 基础议题/运算符
- 《more effective c++》基础部分读书笔记
- <More Effective C++>笔记--基础
- More Effective C++议题【一】:指针和引用
- 更高效的C++_More Effective CPP手记一之基础议题
- web 里面的padding和margin与android里面的不同
- StringUtils.join()
- 异常检测算法--isolation forest
- Java REST
- 【6】.net msmq消息队列实例
- more effective c++基础议题
- 搜狗浏览器导出单个收藏夹
- 区别交叉连接(cross jon) 内连接(inner join) 和外连接(left outer join,right outer join)
- ProtocolBuffer C# dll 生成指导
- PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
- 你会找什么样的男朋友!
- Android 记住密码和自动登录界面的实现(SharedPreferences 的用法)
- Max下发布Qt程序
- 排序测试数组生成器