C ++函数中的默认值?

时间:2015-06-13 10:38:33

标签: c++ default-value

函数中的默认值究竟如何工作?我的问题与这个例子有关:

int func(int number, std::string name = "None", int anotherNumber);

..

int func(int number, std::string name, int anotherNumber){
    ...
}

func(1, 2);
^Error, name is NULL yet we've defined a default value?

编译器提出错误,抱怨参数为NULL且不应该是。但我已经为它定义了一个默认值。

为什么会这样?

2 个答案:

答案 0 :(得分:3)

如果提供位置k的默认参数,则还必须提供从k+1到结尾的所有参数。 C ++允许您仅在结束位置省略参数,否则它无法将参数表达式与形式参数匹配。

考虑这个例子:

int func(int a, int b=2, int c, int d=4);
...
foo(10, 20, 30);

此调用不明确,因为它提供四个参数中的三个。如果允许上面的声明,C ++可以选择调用

func(10, 20, 30, 4);

func(10, 2, 30, 40);

最后有所有默认参数以及参数按位置匹配的规则,不存在这样的歧义:

int func(int a, int b, int c=2, int d=4);
...
foo(10, 20, 30); // means foo(10, 20, 30, 4);

答案 1 :(得分:0)

默认参数是最后一个。

int func(int number1, int number2, std::string = "none");
...
func(1,2); 

https://en.wikipedia.org/wiki/Default_argument