c++函数重载,具体步骤是啥

Posted

技术标签:

【中文标题】c++函数重载,具体步骤是啥【英文标题】:c++ function overloading, what are the exact stepsc++函数重载,具体步骤是什么 【发布时间】:2020-09-04 08:21:21 【问题描述】:

我正在阅读有关函数重载的内容并发现以下内容:

编译器会列出所有同名且同名的函数 参数数量,然后它开始使用 以下规则按固定顺序排列并在匹配时停止。

1) 与调用具有完全相同的参数类型的函数 给它。

2) bool-> int char->int float-> double... (-> 表示转换为)

3) int-> double, double->int... (-> 表示转换为)

例如:

void foo(int x)

    return;


foo(True);//will trigger step 2.

有人能详细说明数字 2 和 3 吗?并添加完整列表?

【问题讨论】:

这个描述来自哪里?首先,这是错误的。这是一个更好的描述:en.cppreference.com/w/cpp/language/overload_resolution 我是从其他语言翻译过来的,为什么会出错? “使用以下规则按固定顺序开始查找函数,找到匹配时停止”是错误的。它首先找到一组可行的函数,然后对它们进行排序。如果有一个明确的最好的,那就是调用,否则它是错误的。 【参考方案1】:

1) 与调用它的参数类型完全相同的函数

因此,如果我尝试调用foo(1),它将首先尝试查找任何名为foo 的函数,该函数采用int 类型的单个参数。

2) bool-> int char->int float-> double... (-> 表示转换为)

因此,如果我执行 foo(True) 并且在步骤 1 中没有找到任何内容,它会尝试将 True 转换为 int 并再次执行步骤 1)

3) int-> double, double->int... (-> 表示转换为)

如果 2) 步骤没有找到任何合适的函数,它将尝试将任何 int 参数转换为 double,依此类推。

【讨论】:

但是 2 号和 3 号的完整列表呢?

以上是关于c++函数重载,具体步骤是啥的主要内容,如果未能解决你的问题,请参考以下文章

c++重载赋值操作符的返回值是啥?

C++ 函数重载,函数模板和函数模板重载,选择哪一个?

php和c,c++的区别是啥?

C++:一篇文章,带你玩转 函数模板以及重载解析,函数还可以这样玩?

C++学习(四五零)重载覆盖隐藏

初识C++ 函数重载以及背后的原理