编译器如何区分超载功能
How compiler differentiates between over-loaded functions
我了解什么功能过载。但是,我很好奇编译器如何区分这些超载功能。假设我有以下两个重载函数定义。
#include <iostream>
int sum(int a, int b);
int sum(vector<int> a, vector<int> b);
那么,编译器如何决定要拨打哪个功能?我了解逻辑,它根据参数的数据类型进行区分。但是,如何实施?
正如您所说的一切取决于参数类型,可能是通过转换:
#include <iostream>
#include <vector>
using namespace std;
int sum(int, int)
{
cout << "ints" << endl;
}
int sum(vector<int>, vector<int>)
{
cout << "vectors" << endl;
}
class C1 {
public:
operator int() { return 0; }
};
class C2 {
public:
operator int() { return 0; }
operator vector<int>() { vector<int> v ; return v; }
};
int main()
{
sum(1, 2); // ints
sum(1.2, 3); // ints, use conversion from double to int
vector<int> v;
sum(v, v); // vectors
// sum(v, 0); no matching function for call to 'sum(std::vector<int>&, int)'
C1 c1;
sum(c1, c1); // use conversion from C1 to int
C2 c2;
//sum(c2, c2); call of overloaded 'sum(C2&, C2&)' is ambiguous
return 0;
}
汇编和执行:
pi@raspberrypi:/tmp $ g++ -pedantic -Wextra c.cc
pi@raspberrypi:/tmp $ ./a.out
ints
ints
vectors
ints
相关文章:
- 如果我具有调用其其他实例之一的超载函数,它是否被认为是递归功能
- 超载类成员功能标记为const
- 超载分辨率在模板实例化点后找到功能
- 构造函数超载以接受任何功能
- 界面设计:超载功能的安全性采用字符串和字符阵列
- Python C API-返回功能超载中的不同类型
- 模棱两可的功能超载[例如最大限度()]
- 找不到超载的成员功能,类位于标题中
- 如何使用模板函数参数编写包装函数,该功能可以采用超载的成员函数
- BOOST-ASIO ASYNC_RECEIVE_FROM功能超载问题( 动态指针)
- 功能模板超载分辨率在Visual C 2017中失败
- 将超载函数指针作为参数传递到过载模板功能
- 编译器如何区分超载功能
- C 17带有运营商超载功能的评估顺序
- 超载功能没有上下文类型信息
- 为模棱两可的超载功能调用创建默认值
- 超载功能运算符
- 超载功能中的错误
- STD ::绑定和超载功能
- 超载功能错误消息