<More Effective C++>笔记--运算符
来源:互联网 发布:ubuntu改变系统语言 编辑:程序博客网 时间:2024/06/09 16:55
2 运算符
~~~~~~~~~
2.1 谨慎定义类型转换函数
=========================
1. 有两种函数允许编译器进行隐式类型转换:
* 单参数构造函数(包括除了第一个参数,所有参数都有缺省值得情况)
* 隐式类型转换运算符
隐式类型转换运算符只是一个样子奇怪的成员函数:operator 关键字,其后跟一个类型符号。你不用定义函数的返回类型,因为返回类型就是这个函数的名字。
2. explicit关键字,只会拒绝隐式类型转换而调用构造函数。显式类型转换依然合法。
3. 隐式类型转换只会转换一次,即不会A转成B再转成C
- struct B
- {
- B(int){};
- };
- struct D2
- {
- D2(B ){};
- };
- void test(D2)
- {
- cout<<"D2 created"<<endl;
- }
- int main()
- {
- test(1); //编译出错,不能int->B->D2
- }
2.2 区别自增和自减operator的前置和后置形式
===========================================
1. 前置operator不带参数,而后置operator带一个int参数,在调用时,编译器自动赋值为0
2. 前置返回一个reference,而后置返回一个const对象(主要是为了防止i++++能够编译通过,而且i只增加一次,不合逻辑)
3. 后置式operator的实现应该以前置式operator为基础。
2.3 千万不要重载&&,||和,操作符(因为你永远无法模拟它们)
==========================================================
1. C++对&&和||采取“骤死式”的评估方式。
然而当重定义这些运算符时,“函数调用语义”会取代“骤死式语义”。
“函数调用语义”意味着:所有参数都必须评估完成,各参数评估的次序未知
2. C++对,的评估方式为:逗号左边会先评估,然后逗号的右边再被评估,最后整个逗号表达式的结果以逗号右边的值为代表。
2.4 了解不同意义的new和delete
==============================
1. new operator(也叫new表达式)和operator new是不同的
A* a = new A(),这里的new是new operator,它是C++内置的,你不能改变它的意义(无法重载),它总是先分配足够内存然后调用构造函数初始化内存中的对象。
new operator调用operator new来完成第一部分内存的分配步骤,operator new能够被重载
2. 当调用new operator来分配数组时,就不是调用operator new来分配内存,而是调用operator new[]来分配内存
3. operator new通常声明为void* operator new(size_t size);这里返回类型为void*因为函数返回的是一个未初始化内存的指针。
你能够增加额外的参数重载函数operator new,但是第一个参数类型必须是size_t
4. delete operator和operator delete也是类似的不同。
本文出自 “暗日” 博客,请务必保留此出处http://darksun.blog.51cto.com/3874064/1162476
- <More Effective C++>笔记--运算符
- <More Effective C++>笔记--基础
- <More Effective C++>笔记--异常
- <More Effective C++>笔记--技巧
- <More Effective C++>笔记--其他杂项
- <Effective STL>笔记--容器
- <Effective STL>笔记--关联容器
- <Effective STL>笔记--迭代器
- <Effective STL>笔记--算法
- <Effective STL>笔记--仿函数
- <<More Effective C++>>读书笔记2: 运算符
- Java 运算符 &与&& << >> >>>区别
- Java 运算符 &与&& << >> >>>区别
- java_移位运算符<<,>>,>>>
- 《More Effective C++》笔记
- <Effective STL>笔记--vector和string
- 《more effective c++》笔记4
- More Effective C++学习笔记(2)-运算符
- <Effective STL>笔记--关联容器
- <Effective STL>笔记--迭代器
- <Effective STL>笔记--算法
- <Effective STL>笔记--仿函数
- <More Effective C++>笔记--基础
- <More Effective C++>笔记--运算符
- <More Effective C++>笔记--异常
- <More Effective C++>笔记--技巧
- <More Effective C++>笔记--其他杂项
- 让vim正确显示cfg文件中的xxx = yyy=zzz
- Remember Mode 指导
- 《Exceptional C++》笔记(1)
- 《Exceptional C++》笔记(2)
- Emacs在走向没落吗?