【发布时间】:2021-09-24 03:16:19
【问题描述】:
所以我有一个函数:
void foo(char a = 'A', int b = 0)
{
// code
}
我还有一个:
void foo(int b = 0, char a = 'A')
{
//code
}
然后如果我调用foo(),它会返回一个错误,因为编译器无法决定调用哪个函数。那么我可以创建一个比另一个优先级更高的函数吗?那么如果我调用foo() 那么编译器该选择哪一个呢?
【问题讨论】:
-
如果你让其中一个具有更高的优先级,那么另一个永远不会被调用,不是吗?那么你为什么要定义第二个呢?
-
@NateEldredge:我认为他们的意思是,当任何一个函数同样可行时,他们只是想要一个决胜局(感谢不带参数调用),但是当带参数调用时,它会选择更合适的功能。
-
@NateEldredge 第二个交换了变量。
-
你为什么要引入 tie(通过允许不带参数调用任一版本)?情况有点奇怪,因为 you 引入了歧义,而不是消除歧义,您想添加更多内容。
-
使用显式重载而不是默认参数。例如。 a foo(int b) 将调用 foo(char a, int b),默认 a 为 'A'。这将使您更容易明确(!)您在代码中的含义以及您想要选择的功能(通过一些非常明确的规则)
标签: c++ function c++11 ambiguous