静态和常量如何解决不明确的函数调用
How do static and const resolve ambigous function calls?
我目前正在尝试理解函数调用的概念,并注意到你可以写出可怕的代码,但仍然可以通过滥用隐式转换、const 和静态来使其工作。
现在我想了解为什么,尤其是它是如何工作的。例如,下面是我用于测试的代码片段。
标有 (1( 的行需要a_const需要它的const
修饰符,并且有一个 static
函数需要或多或少适当的参数。删除这两个中的任何一个都会导致编译错误。那么这是如何工作的呢?
#include <iostream>
struct A {
static void func(const int a, int b) {
std::cout << "A-1"<<std::endl;
}
void func(const int a, float b) {
std::cout << "A0"<<std::endl;
}
void func(double a, float b) {
std::cout << "A1"<<std::endl;
}
void func(unsigned int a, char b) {
std::cout << "A2"<<std::endl;
}
void func(float a, int b) {
std::cout << "A3"<<std::endl;
}
};
int main() {
const A a_const;
A a;
a_const.func(1.f,1.f); // (1)
// a.func(1.f,1.f); // (2)
return 0;
}
a.func(1.f,1.f);
这是一个模棱两可的调用,因为所有匹配A::func
并且没有一个比另一个更好匹配。
a_const.func(1.f,1.f);
不是一个模棱两可的调用,因为a_const
是常量合格的,所以所有非常量A::func
都不匹配。重载集只剩下static
成员函数。
相关文章:
- Visual C++(VS2017)中用户定义的转换不明确
- IpOpt拒绝解决不受约束的问题
- 重载类方法的不明确调用
- 为函数定义符号不明确的指针参数
- 父类的私有函数会导致对具有相同名称和相似参数的子类中的公共函数的不明确调用
- 如何解决不明确的运算符过载问题?
- 如何解决多次继承的不明确变量名称?
- 静态和常量如何解决不明确的函数调用
- 解决隐藏歧义的不明确用户定义转换
- 解决模板参数推导中的不明确调用
- 解决方案叮当警告-成员模板不明确
- 如何解决此不明确的模板构造函数调用
- C++模板:专用成员函数,用于解决主模板中不明确的重载情况
- 为什么过载解决方案在这种情况下是不明确的
- 解决命名空间中不明确的运算符
- 使用 +(一元加号)解决 lambda 的函数指针和 std::function 上的不明确重载
- 用模板参数的模板来解决不明确调用的c++默认行为是什么
- 了解如何在c++中解决不明确的成员请求
- 对重载函数的不明确调用的解决方法
- 解决运算符 [] 的不明确重载