以下代码在 C++ 中合法吗?
void f(void* = 0)
{}
int main()
{
f();
}
C++ 标准的哪一页表明这种用法是合法的?
以下代码在 C++ 中合法吗?
void f(void* = 0)
{}
int main()
{
f();
}
C++ 标准的哪一页表明这种用法是合法的?
是的,这是完全合法的。在 N3485 8.3.6 Default Arguments /4 中有一个明显的例子:
[示例:声明
void point(int = 3, int = 4);
声明一个可以用零个、一个或两个 int 类型的参数调用的函数。
是的,这是合法的。
没有标准的措辞来专门允许这种功能组合;也没有任何禁止它的方法。
默认参数语法适用于参数声明中的函数参数:
[C++11: 8.3.6/1]:
如果在参数声明中指定了初始化子句,则此初始化子句用作默认参数。默认参数将在缺少尾随参数的调用中使用。
...和参数声明中的函数参数可能是未命名的:
[C++11: 8.3.5/11]:
[..]可以选择提供标识符作为参数名称。[..]
在 8.3.6/4 下甚至还有一个这种用法的例子(虽然例子不是规范文本,所以这不能用来具体证明任何事情)。
是的,这是合法的。
第 8.3.5/1 节中为函数参数给出的语法产生式允许参数声明不带标识符,但带有赋值表达式(作为初始化器)。
它不仅合法,而且根据您的编码风格,它实际上可能非常有用。
默认参数仅在函数声明中有意义。
命名参数仅在函数定义中有意义。
fh:
void f(void*=nullptr);
fcc
void f(void* x)
{
...
}