【发布时间】:2016-12-20 00:03:25
【问题描述】:
谁能解释为什么重载解决方案会选择第二个函数,而不是报告一个模棱两可的错误。无论如何,第 2 个函数是完全匹配的,但第 1 个函数进行了限定转换(从 char* 到 const char*)。但是,来自http://en.cppreference.com/w/cpp/language/overload_resolution的文档
说明资格转换也是完全匹配的,因此两个候选人应该具有相同的排名。
每种类型的标准转换序列都被分配三个等级之一:
1) 精确匹配:无需转换、左值到右值转换、限定转换、函数指针转换、(C++17 起)用户定义的类类型到同一类的转换
2) 提升:积分提升、浮点提升
3) 转换:整数转换、浮点转换、浮点整数转换、指针转换、指针到成员的转换、布尔转换、派生类到其基类的用户定义转换
void g(const char* x)
{
std::cout << "g(const char* x)" << std::endl;
}
void g(char* x)
{
std::cout << "g(char* x)" << std::endl;
}
void callg()
{
char a[] = "sample";
g(a);
}
【问题讨论】:
标签: c++