【问题标题】:Overloading a function that has default arguments重载具有默认参数的函数
【发布时间】:2015-11-12 15:57:37
【问题描述】:

在 C++ 中,如果我重载如下函数

void foo(int bar);
void foo(int bar, float baz = 0);

然后我叫它

foo(1);

哪个 foo 会被调用?

【问题讨论】:

标签: c++ overloading default-parameters default-arguments


【解决方案1】:

我试过了,但它不会像 David Haim 在他对我的问题的评论中所说的那样编译。

【讨论】:

    【解决方案2】:

    为什么你甚至需要第一个?似乎是多余的。第一个会被击中。这是重复的。检查here 以获得答案。

    【讨论】:

    • 为什么我需要第一个,你的意思是?
    • 是的,我的意思是第一个 - 为清楚起见进行了编辑。第二个将涵盖这两种情况。但是,仍然是一个愚蠢的问题。有关更多解释,请参阅我的链接:“如果两个候选者被判断为同样好,则优先选择没有可选参数的候选者,其参数在调用中被省略。这是在重载决议中普遍偏好的结果参数较少的候选者。”
    • 您指出的“答案”是关于 C#,OP 询问了 C++,它有不同的重载解析规则。
    • 它仍然被认为是模棱两可的。来自learnCPP.com“但是,重要的是要注意默认参数不计入使函数唯一的参数。因此,不允许以下内容:void printValues(int x); void printValues(int x, int y =20); 如果调用者调用 printValues(10),编译器将无法用默认值来区分用户是想要 printValues(int) 还是 printValues(int, 20)。"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    相关资源
    最近更新 更多