C++必知必会之(24)成员函数查找
来源:互联网 发布:tensorflow 图片分类 编辑:程序博客网 时间:2024/05/23 01:17
1、调用一个成员函数时,包括三个步骤:
第一步,编译器查找函数的名字;
第二步,从可用候选者中选择最佳匹配函数;
第三步,检查是否具有访问该匹配函数的权限。
2、很多与函数匹配有关的错误并非源于对编译器复杂的名字查找和重载函数匹配算法的误解,而是对这有序三大步的性质的误解。
class B {
public:
//.....
void f( double );
};
class D : public B {
void f ( int );
};
//.....
D d;
d.f( 12.3 ); //混淆
上面调用的是哪一个成员f?
步骤1:查找函数的名字。因为正在调用一个D对象的成员,所以将从D的作用域开始查找并且立即定位到D::f上。
步骤2:从可用候选者中选择最佳匹配函数。我们只有一个候选者D::f,因此会尝试匹配该函数。可以通过将实参12.3从double转换为int而做到这一点。(但会丢失精度)
步骤3:检查访问权限。可能会产生一个错误,因为D::f是私有成员。
3、基类中的哪一个看上去有着更好的匹配、并且可访问的函数f已经无关紧要,因为一旦在内层作用域中找到另一个名字,编译器就不会到外层作用域中继续查找该名字。
内存作用域中的名字会隐藏外层作用域中相同的名字。
4、实际上,该名字甚至可以不是一个函数的名字:
class E : public D {
int f;
};
//......
E e;
e.f( 12 ); //错误。
这样得到一个编译期错误,因为在作用域E中查找名字f,结果找到了一个数据成员,而不是成员函数。
这也是建立并遵从简单命名习惯的诸多理由之一。
如果数据成员E::f被命名为f_或m_f,它就不会隐藏被继承的基类函数f了。
- C++必知必会之(24)成员函数查找
- C++必知必会 - 成员函数查找
- 条款24 成员函数查找
- 认清C++语言之《成员函数查找》
- c++const成员函数
- C++_const成员函数
- [C++] 静态成员函数
- C++:特殊成员函数
- 一步一步学习C++(类)之成员函数的特性
- c++static数据成员和成员函数
- C 字符串查找函数
- C 字符串查找函数
- C++static静态成员函数
- C++:类的成员函数
- C++—特殊成员函数
- 【C++】静态成员函数小结
- C++——成员函数
- C++:静态类成员函数
- [codility]Triangle
- python 字符编码
- [codility]Max-product-of-three
- [codility]Number-of-disc-intersections
- hibernate中联合主键的生成策略
- C++必知必会之(24)成员函数查找
- 顺手的Linux发行版及其工具推荐
- [codility]Brackets
- Rooyee Messenger 2.3.1 源码调试报接口不支持异常的解决办法
- cocos2d-x 对传入的字符串进行解析分割 解析
- python MySQLdb手动简单操作源码
- release下编译:无法打开包括文件:“opencv2/core/core.hpp“
- [codility]Fish
- WDF驱动开发(1)- 一个简单的WDF驱动(non-pnp)