c++中的默认参数

default parameters in c++

本文关键字:参数 默认 c++      更新时间:2023-10-16

考虑以下内容:

int foo(int x , int z = 0);
int foo(int x, int y , int z = 0);

如果我这样调用这个函数:

foo( 1 , 2);

编译器如何知道要使用哪一个?

它不会,因此这个例子不会干净地编译,它会给你一个编译错误
它会给您一个不明确的函数调用错误。

在线样本:

int foo(int x , int z = 0){return 0;} 
int foo(int x, int y , int z = 0){return 10;}
int main()
{
    foo( 1 , 2); 
    return 0;
}

输出:

prog.cpp:在函数"int main()"中:
prog.cpp:6:错误:重载"foo(int,int)"的调用不明确
prog.cpp:1:注意:候选为:int foo(int,int)
prog.cpp:2:注意:int foo(int,int,int)

没有,这就是为什么会出现编译器错误。

这是个不错的问题。但是它不会编译,因为对foo()的调用异常。您可以通过在函数签名中使用不同的数据类型来消除这种歧义。

有关默认参数函数重载的更多详细信息,请参阅http://www.smart2help.com/e-books/ticpp-2nd-ed-vol-one/Chapter07.html

编译器将报告不明确的函数重载。由于您无法确定将调用哪个函数,因此编译器

也是如此