More Effective C++总结(2):运算符
2011-09-19 14:53
351 查看
条款5: 小心用户自定义的转换函数
两种函数可以让编译器实施隐式转换
1) 单个参数的构造函数
2) 隐式类型转换运算符 例: operator double() const
避免编译器实施隐式转换的方法
1) 对于单参数构造函数,使用explicit关键字
2) 对于隐式类型转换运算符,使用不同于语法关键字但功能相同的函数来替代转换运算符 例:double asDouble() const;
条款6: 区分自增运算符和自减运算符的前缀形式和后缀形式
1) C++规定,后缀形式有一个int类型参数,当函数被调用时,编译器悄无声息传递一个0左右参数
2) 前缀运算符返回一个引用,后缀运算符返回一个const对象,所以前缀运算符效率高,应该尽量使用前缀运算符.
3) 后缀运算符返回const得原因
避免出现i++++的情况,如果不返回consts, i++++实际只+了一次,如果加上const,则i++++编译出错.
条款7: 不要重载&&, ||和,
1) 短路求值法
布尔表达式从左往右求值,一旦确定该表达式的值就停止运算.
2)不要重载&& || ,的原因
会破坏短路求值法,破环用户习惯.
条款8: 理解new delte在不同情形下的含义
1) new operator
1. 调用operator new分配内存
2. 调用构造函数
3. 调用static_cast把void*cast成对象指针
2) operator new
void* operator new(t_size size);
分配内存
3) placement new
void* operator new(size_t, void* location)
{
return location;
}
在已经有指针指向的内存里建立一个对象
两种函数可以让编译器实施隐式转换
1) 单个参数的构造函数
2) 隐式类型转换运算符 例: operator double() const
避免编译器实施隐式转换的方法
1) 对于单参数构造函数,使用explicit关键字
2) 对于隐式类型转换运算符,使用不同于语法关键字但功能相同的函数来替代转换运算符 例:double asDouble() const;
条款6: 区分自增运算符和自减运算符的前缀形式和后缀形式
1) C++规定,后缀形式有一个int类型参数,当函数被调用时,编译器悄无声息传递一个0左右参数
class UPInt { public: UPInt& operator++(); const UPInt operator++(int); UPInt& operator--(); const UPint operator--(int); };
2) 前缀运算符返回一个引用,后缀运算符返回一个const对象,所以前缀运算符效率高,应该尽量使用前缀运算符.
UPInt& UPInt::operator ++() { *this+=1; return *this; } const UPInt UPInt::operator ++(int) { const UPInt oldValue = *this; *this+=1; return oldValue; }
3) 后缀运算符返回const得原因
避免出现i++++的情况,如果不返回consts, i++++实际只+了一次,如果加上const,则i++++编译出错.
条款7: 不要重载&&, ||和,
1) 短路求值法
布尔表达式从左往右求值,一旦确定该表达式的值就停止运算.
2)不要重载&& || ,的原因
会破坏短路求值法,破环用户习惯.
条款8: 理解new delte在不同情形下的含义
1) new operator
1. 调用operator new分配内存
2. 调用构造函数
3. 调用static_cast把void*cast成对象指针
2) operator new
void* operator new(t_size size);
分配内存
3) placement new
void* operator new(size_t, void* location)
{
return location;
}
在已经有指针指向的内存里建立一个对象
相关文章推荐
- More Effective C++总结(1):基础议题
- 《More Effective C++》学习心得(五) 前置和后置自增运算符
- <More Effective C++>笔记--运算符
- more effective c++使用条款(一)—— 基础议题/运算符
- Effective & More Effective C++总结
- More effective C++学习总结
- More Effective C++ 读书摘要(一、基础议题 二、运算符)Item1 - 8
- More Effective C++ 阅读笔记(六)--哪些运算符不能重载
- operator new和 new operator的区别(More Effective C++_8(运算符))
- <<More Effective C++>>读书笔记2: 运算符
- More Effective C++总结(3):异常
- More Effective C++----(22)考虑用运算符的赋值形式(op=)取代其单独形式(op)
- C++之尽量不要重载&&,||或者,运算符(7)---《More Effective C++》
- &lt;More Effective C++&gt;笔记--运算符
- more effective c++第二章读书笔记:c++的运算符,运算符转换,前缀自增和后缀自增,operatpr new和operator delete.
- C++之自增、自减运算符的前缀、后缀运算符区别(5)---《More Effective C++》
- More effective C++学习总结
- More Effective C++ (运算符)
- More Effective C++ 阅读笔记(六)--哪些运算符不能重载
- More Effective C++(条款8:了解各种不同意义的new和delete)