一个未命名的函数参数可以有一个默认值吗?

xml*_*lmx 11 c++ function default-parameters function-signature c++11

以下代码在C++中是否合法?

void f(void* = 0)
{}

int main()
{
    f();
}
Run Code Online (Sandbox Code Playgroud)

C++标准的哪一页说明这种用法是合法的?

chr*_*ris 12

是的,这完全合法.N3485 8.3.6 Default Arguments/4中有一个明显的例子:

[例子:声明

void point(int = 3, int = 4);  
Run Code Online (Sandbox Code Playgroud)

声明一个可以使用类型为int的零个,一个或两个参数调用的函数.

  • 例子不是规范性的;) (2认同)

Lig*_*ica 12

是的,这是合法的.

没有标准的措辞可以特别允许这种功能组合; 也没有任何不允许它.

默认参数语法适用于参数声明中的函数参数:

[C++11: 8.3.6/1]: 如果在参数声明中指定了initializer子句,则此initializer子句将用作默认参数.默认参数将用于缺少尾随参数的调用中.

... 参数声明中的函数参数可以是未命名的:

[C++11: 8.3.5/11]: [..]可以选择提供标识符作为参数名称.[..]

甚至在8.3.6/4下也有这种用法的例子(尽管示例不是规范性文本,因此不能用于具体证明).