Effective C++ 读书笔记 条款24:若所有参数皆需类型转换,则为此采用non-member 函数
来源:互联网 发布:千客盟 互刷软件 编辑:程序博客网 时间:2024/05/21 17:08
Core List
1. operator* 的 member 函数和 non-member 函数实现
Class Rational {
public:
const Rational operator* (const Rational& rhs) const; // member 函数,第一个参数是 this 指针,因此两个参数只需要写一个即可
}
const Rational operator* (const Rational& lhs, const Rational& rhs) const; // non-member函数
2. member 函数 —— 类型转换
(1) 实例1:无类型转换
Rational oneEighth (1,8);
Rational oneHalf (1,2);
Rational result = oneEighth * oneHalf; // 正确,等价于 oneEighth.operator* (oneHalf);
(2) 实例2:类型转换
result = oneHalf * 2; // 正确,等价于 oneEighth.operator* (2);
const Rational temp(2);
result = oneHalf * temp;
注:
a. 这里发生了隐式类型转化,编译器知道传递一个 int,而函数需要一个 Rational;但它也知道调用一个 Rational 的构造函数,可以构造出一个 Rational 对象来。
b. 构造函数默认是non-explicit,如果声明为 explicit,则该语句不能生效,因为不会执行隐式类型转换。
(3) 实例3:类型转换
result = 2*oneHalf ; // 错误,等价于 2.operator* (oneEighth);
注:2 并非一个 Rational 类型,因此无 operator* 这个成员函数
结论:只有当参数被列于参数列内,这个参数才是隐式类型转换的合格参与者。地位相当于“被调用之成员函数所隶属的那个对象”—— 即 this 对象,不可隐式类型转换。
3. non-member函数 —— 类型转换
result = oneHalf * 2; // 正确,等价于 operator* (oneHalf, 2);
result = 2 * oneHalf; // 正确,等价于 operator* (2, oneHalf);
注:这里的 non-member 函数完全可以通过 class Rational 的public 接口实现,无需声明为 friend 函数。
结论:如果你需要为某个函数的所有参数(包括 this 指针所指的那个隐喻参数)进行类型转换,那么这个函数必须是个 non-member。
- 读书笔记《Effective C++》条款24:若所有参数皆需类型转换,请为此采用non-member函数
- Effective C++ 读书笔记 条款24:若所有参数皆需类型转换,则为此采用non-member 函数
- 《Effective C++》学习笔记条款24 若所有参数皆需类型转换,请为此采用non-member函数
- Effective C++:条款24:若所有参数皆需类型转换,请为此采用non-member函数
- 条款24:若所有参数皆需类型转换,请为此采用non-member函数
- 条款24:若所有参数皆需类型转换,请为此采用non-member函数
- 条款24:若所有参数皆需类型转换,请为此采用non-member函数
- 条款24::若所有参数皆需类型转换,请为此采用 non-member 函数
- 条款24:若所有参数皆需类型转换,请为此采用non-member函数
- 条款24 若所有参数皆需类型转换,请为此采用non-member函数
- 条款24 若所有参数皆需类型转换,请为此采用non-member函数
- C++之若所有参数皆需类型转换,请为此采用non-member函数(24)---《Effective C++》
- 《Effect C++》学习------条款24 :若所有参数皆须类型转换,请为此采用non-member函数
- 条款24:若所有参数都需要类型转换,请为此采用non-member函数
- Effective C++ Item 24 若所有参数皆需类型转换,请为此采用non-member函数
- effective c++ 若所有参数皆需要类型转换,请为此采用non-member函数
- Effective C++——》条款24:若所有参数皆需类型转化,请谓词函数采用non-member函数
- item24: 若所有参数皆需类型转换,请为此采用non-member函数
- 啊三大三大三大阿斯顿
- ios 5个iOS应用开发者海外学习资源站推荐
- ratio_to_report()分析函数
- 【移动开发】AIDL中callback的实现
- 详解邦邦掌柜网络电话的直拨和回拨区别
- Effective C++ 读书笔记 条款24:若所有参数皆需类型转换,则为此采用non-member 函数
- 迷茫期 - 2014.8~2010.10
- Windows 下Nexus搭建Maven私服
- oc Foundation Kit快速教程
- ant的安装、环境变量配置
- php文件锁(转)
- Source insight 3572版本安装及An invalid source insight serial number was detected解决方法
- oracle sql优化总结
- pycharm 3.4.1 安装