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++函数重载,具体步骤是啥的主要内容,如果未能解决你的问题,请参考以下文章