C++为什么不能通过函数返回值区分函数重载?
2016-09-09 15:16
260 查看
函数的两个要素:参数与返回值。
如果同名函数的参数不同(包括类型、顺序不同),那么容易区别出它们是不同的函数。
如果同名函数仅仅是返回值类型不同,有时可以区分,有时却不能。例如:
void Function(void);
int Function (void);
上述两个函数,第一个没有返回值,第二个的返回值是int 类型。如果这样调用函数:
int x = Function ();
则可以判断出Function 是第二个函数。问题是在C++/C 程序中,我们可以忽略函数的返回值。在这种情况下,编译器和程序员都不知道哪个Function 函数被调用。
所以只能靠参数而不能靠返回值类型的不同来区分重载函数。编译器根据参数为每个重载函数产生不同的内部标识符。
附图:
如果同名函数的参数不同(包括类型、顺序不同),那么容易区别出它们是不同的函数。
如果同名函数仅仅是返回值类型不同,有时可以区分,有时却不能。例如:
void Function(void);
int Function (void);
上述两个函数,第一个没有返回值,第二个的返回值是int 类型。如果这样调用函数:
int x = Function ();
则可以判断出Function 是第二个函数。问题是在C++/C 程序中,我们可以忽略函数的返回值。在这种情况下,编译器和程序员都不知道哪个Function 函数被调用。
所以只能靠参数而不能靠返回值类型的不同来区分重载函数。编译器根据参数为每个重载函数产生不同的内部标识符。
附图:
相关文章推荐
- 【面向对象程序设计常见面试题】流运算符为什么不能通过类的成员函数重载?一般怎么解决?(7)
- 写一个只能C编译通过,而C++不能编译通过的函数。
- c++中传递数组给函数时,为什么不能在子函数中求数组长度
- 为什么C++变量名字和函数名字不能是同一个?
- C# PDF Page操作——设置页面切换按钮 C# 添加、读取Word脚注尾注 C#为什么不能像C/C++一样的支持函数只读传参 web 给大家分享一个好玩的东西,也许你那块就用的到
- 为什么在函数中不能通过指针返回本地定义的变量
- c++中非静态函数不能用类名调用,为什么CWnd的成员函数GetDC()可以直接调用啊?
- C++之静态成员函数为什么不能为虚函数
- C C++全局变量初始化 initializer element is not constant 错误 c++中为什么不能对全局变量在函数外赋值
- C++中为什么构造函数不能为虚函数原因
- c++静态成员函数为什么不能为虚函数?
- C++的const类成员函数(解释为什么非const成员函数不能访问const对象的数据成员)
- C#为什么不能像C/C++一样的支持函数只读传参
- C/C++ 为什么在函数内部修改形参并不能真正地改变传入形参的值?
- C++通过基类指针delete派生类数组,析构函数是虚函数,程序为什么会崩溃? https://www.zhihu.com/question/30838092/answer/49623765
- 为什么C++静态成员函数不能访问非静态成员变量、不能调用非静态成员函数?(面试常考)
- C++各种函数为什么能或者不能是虚函数
- 为什么C++成员函数不能作为C-Style回调函数?
- C++中为什么构造函数不能定义为虚函数
- 处理 C++ 项目中的 IntelliSense 失败:输入类实例后,不能显示其成员几成员函数问题解决