Dan*_*ker 30

简化语言定义并保持代码可读性.

void foo(int x = 2, int y);
Run Code Online (Sandbox Code Playgroud)

要调用它并利用默认值,您需要这样的语法:

foo(, 3);
Run Code Online (Sandbox Code Playgroud)

这可能觉得太奇怪了.另一种方法是在参数列表中指定名称:

foo(y : 3);
Run Code Online (Sandbox Code Playgroud)

必须使用新的符号,因为这已经意味着:

foo(y = 3); // assign 3 to y and then pass y to foo.
Run Code Online (Sandbox Code Playgroud)

ISO委员会考虑并拒绝了命名方法,因为他们对在函数定义之外引入参数名称的新重要性感到不舒服.

如果您对更多C++设计原理感兴趣,请阅读Stroustrup 的C++设计和演变.

  • 在D&E中,Stroustrup说由于函数声明和函数定义的分离,命名参数习惯在C++中很棘手.如果用户在声明中使用一个名称而在实现中使用另一个名称,则编译器将不得不忽略一个名称. (6认同)

Dan*_*ull 22

如果您定义以下功能:

void foo( int a, int b = 0, int c );
Run Code Online (Sandbox Code Playgroud)

你如何调用该函数并为a和c提供一个值,但是将b保留为默认值?

foo( 10, ??, 5 );
Run Code Online (Sandbox Code Playgroud)

与其他一些语言(例如Python)不同,C/C++中的函数参数不能通过名称限定,如下所示:

foo( a = 10, c = 5 );
Run Code Online (Sandbox Code Playgroud)

如果可能,则默认参数可以是列表中的任何位置.


Eri*_*ric 5

想象一下,你有这个原型的功能:

void testFunction(bool a = false, bool b = true, bool c);
Run Code Online (Sandbox Code Playgroud)

现在假设我调用了这样的函数:

testFunction(true, false);
Run Code Online (Sandbox Code Playgroud)

编译器应该如何确定我想为哪些参数提供值?