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中有一个明显的例子:
[例子:声明
Run Code Online (Sandbox Code Playgroud)void point(int = 3, int = 4);声明一个可以使用类型为int的零个,一个或两个参数调用的函数.
Lig*_*ica 12
是的,这是合法的.
没有标准的措辞可以特别允许这种功能组合; 也没有任何不允许它.
默认参数语法适用于参数声明中的函数参数:
[C++11: 8.3.6/1]:如果在参数声明中指定了initializer子句,则此initializer子句将用作默认参数.默认参数将用于缺少尾随参数的调用中.
... 参数声明中的函数参数可以是未命名的:
[C++11: 8.3.5/11]:[..]可以选择提供标识符作为参数名称.[..]
甚至在8.3.6/4下也有这种用法的例子(尽管示例不是规范性文本,因此不能用于具体证明).