Mar*_*Rob 8 c++ overloading function
为什么这会导致编译器错误,说明我的引用是不明确的?我有一个float,int而且string,应该都创建单独的功能签名,对吗?
这是我到目前为止:
#include <iostream>
#include <string>
using namespace std;
int plus(int a, int b);
float plus(float a, float b);
string plus(string a, string b);
int main(void)
{
int n = plus(3, 4);
double d = plus(3.2, 4.2);
string s = plus("he", "llo");
string s1 = "aaa";
string s2 = "bbb";
string s3 = plus(s1, s2);
}
int plus(int a, int b) {
return a+b;
} // int version
float plus(float a, float b) {
return a+b;
} // float version
string plus(string a, string b) {
return a+b;
} // string version
Run Code Online (Sandbox Code Playgroud)
Joh*_*eek 17
首先,不要使用using namespace std;.在这种情况下,碰巧有一个名为std::plus-oh 的结构,等待,没关系,实际调用plus它的构造函数被抛入存储桶以便在调用函数时重载解析plus.
其次,你有一种歧义,因为3.2它4.2是一种类型,double并且可以很好地转换为float或int.
这是一种简化,但是当涉及将数字传递给重载函数时,C++基本上使用这些规则:
如果您在特定级别有多个候选人,那么这是一个模棱两可的问题.至关重要的是,a double不会升级到float- 这将是降级.因此它必须使用标准转换为a float,这与标准转换为a int,因此这两个重载是不明确的.