C++中重载决议与可访问性检查的顺序
来源:互联网 发布:我要淘宝刷单 编辑:程序博客网 时间:2024/05/17 03:28
用一个C++的小例子来说明C++中重载决议与可访问性检查的顺序。
对于如下的类:
class ClxECS
{
public:
double Test(double dValue) { return dValue * 13; };
private:
int Test(int iValue) { return iValue * 13; };
};
{
public:
double Test(double dValue) { return dValue * 13; };
private:
int Test(int iValue) { return iValue * 13; };
};
下面的函数输出是什么?
void ECS_test()
{
int iValue = 13;
ClxECS lx;
cout << lx.Test(iValue) << endl;
}
{
int iValue = 13;
ClxECS lx;
cout << lx.Test(iValue) << endl;
}
如果说你的答案是169,那么你就大错特错了!
因为上面的函数根本不能通过编译!编译器会给你一个不能访问私有成员的错误。
惊奇吗?难道编译器不能找到类ClxECS的公有成员函数double Test(double dValue)并把实参iValue类型转换为double吗?
答案是:不能!其实原因很简单:C++中重载决议是在可访问性检查之前进行的。
对于上面的例子,编译是按如下顺序进行的:
首先,编译器进行重载决议,去查找适合的成员函数(而不管查找到的成员函数是否为public的)。这时候,编译器理所当然的选择参数为int类型的Test成员函数。
然后,编译器进行访问性检查。这个时候,编译器会发现参数类型为int的成员函数Test是类ClxECS的私有成员。那么,编译器就会报错,告诉你无法访问私有成员。
- C++中重载决议与可访问性检查的顺序
- C++中重载决议与可访问性检查的顺序
- c++ 重载决议与可访问性检查
- C++学习笔记-----函数调用时的决议:名字查找,重载决议,可访问性检测
- C++ 重载决议overload resolution 与 SFINAE
- [C#] 成员的可访问性
- [c#]可访问性不一致
- 可重载与不可重载
- c# 中出现 可访问性不一致的原因与解决方法
- c# 中出现 可访问性不一致的原因与解决方法
- 使用c#制作网络爬虫,检查站点可访问性
- 【C++知识点】可重载与不可重载的操作符
- 新华社通稿与”联合国1973号决议”原文的对比
- 类中私有数据成员的可访问性
- C#“可访问性不一致”问题
- C++中重定义、重写、重载的区别以及隐藏与覆盖的访问
- C++中重定义、重写、重载的区别以及隐藏与覆盖的访问
- C++中重定义、重写、重载的区别以及隐藏与覆盖的访问
- strcmp ( )【C语言库函数源代码】
- strncmp ( )【C语言库函数源代码】
- stricmp ( )【C语言库函数源代码】
- strnicmp ( )【C语言库函数源代码】
- 求职--并未结束的结束篇
- C++中重载决议与可访问性检查的顺序
- 自动填充固定行数的 GridView[转自:孟子E章]
- struts中文问题","struts国际化问题"——终极解决方案
- 收集死机代码
- AS3.0教程(1):与Flash9先来一次亲密接触!
- 性能测试方法 (转贴)
- 换新家了
- 怎么把编辑器集成到Tornado中去?
- 书籍介绍-《Web性能测试实战》