item24: 若所有参数皆需类型转换,请为此采用non-member函数
来源:互联网 发布:相机驱动源码 编辑:程序博客网 时间:2024/05/22 10:43
首先强调一下,大部分情况下我都不是很喜欢隐式类型转换,因为没有显式转换那样所有代码全在掌控中的感觉。
至于本条款的议题,与item23一样似乎颇为违反直觉,幸运的是只要举一个简单的例子也许就能让你茅塞顿开。
class Rational{public:Rational(int numerator = 0, int denominator = 1); //非explicit支持隐式转换const Rational operator*(const Rational& rhs) const; //先看member函数的写法...};Rational oneHalf(1, 2);Rational r = oneHalf * 2; //goodRational r2 = 2 * oneHalf; //wrong
很容易理解,对于第二个乘法,没有适当的函数可以把被乘数2先转换成Rational对象再与oneHalf相乘,所以代码错误。
可是没有人会拒绝第二种用法的,而且只要把member函数改成non-member的,你就可以随意用上面的用法了:
const Rational operator*(const Rational& lhs, const Rational& rhs){...}
另一个需要注意的是不要试图画蛇添足的想把上面的函数声明为friend的,记得我们说过的吗,friend和member是一样的封装性的,所以不应该有任何理由让你觉得friend函数得比普通函数有更大的优先选择权。
0 0
- item24: 若所有参数皆需类型转换,请为此采用non-member函数
- 条款24:若所有参数皆需类型转换,请为此采用non-member函数
- 条款24:若所有参数皆需类型转换,请为此采用non-member函数
- 条款24:若所有参数皆需类型转换,请为此采用non-member函数
- 条款24::若所有参数皆需类型转换,请为此采用 non-member 函数
- 条款24:若所有参数皆需类型转换,请为此采用non-member函数
- 条款24 若所有参数皆需类型转换,请为此采用non-member函数
- 条款24 若所有参数皆需类型转换,请为此采用non-member函数
- effective c++ 若所有参数皆需要类型转换,请为此采用non-member函数
- 《Effective C++》学习笔记条款24 若所有参数皆需类型转换,请为此采用non-member函数
- Effective C++ Item 24 若所有参数皆需类型转换,请为此采用non-member函数
- Effective C++:条款24:若所有参数皆需类型转换,请为此采用non-member函数
- 读书笔记《Effective C++》条款24:若所有参数皆需类型转换,请为此采用non-member函数
- C++之若所有参数皆需类型转换,请为此采用non-member函数(24)---《Effective C++》
- 条款24:若所有参数都需要类型转换,请为此采用non-member函数
- 《Effect C++》学习------条款24 :若所有参数皆须类型转换,请为此采用non-member函数
- Effective C++ 读书笔记 条款24:若所有参数皆需类型转换,则为此采用non-member 函数
- 条款24:若所有参数皆需类型转化,请谓词函数采用non-member函数
- AIX日常维护
- eclipse快捷键
- 构造函数
- Java集合框架的再学习
- JavaScript优秀资源收集
- item24: 若所有参数皆需类型转换,请为此采用non-member函数
- 大小写字母,数字的ascii码值
- Java 学习笔记 开发环境搭建JDK+Tomcat+Eclipse
- (摘抄笔记)人脸识别必读的N篇文章
- UVA 代码说明
- 内存管理内幕 - 动态分配的选择、折衷和实现
- 项目阶段学习总结(设计集合框架、JPA、个人思路)
- hdu Examining the Rooms
- 单向链表插入排序 Java