[dcl.fct.default]/3(重点是我的):
默认参数只能在。中指定 函数声明的参数声明子句或 lambda-declarator或模板参数(14.1);在后者 case,initializer-clause应该是赋值表达式。一个 不应为参数包指定default参数。 如果是的话 在参数声明子句中指定,它不会发生 在...的声明者或抽象声明者中 参数声明
上面的最后一句话说,如果在参数声明子句中指定了默认参数,那么它应该在参数声明的声明符或抽象声明符中出现不。然而,当我查看参数声明的定义时,我在[dcl.fct]/3中找到以下内容(强调是我的):
参数声明:
attribute-specifier-seqopt decl-specifier-seq 声明符
属性说明符seqopt decl-specifier-seq declarator = initializer-clause
attribute-specifier-seqopt decl-specifier-seq 摘要:declaratoropt
attribute-specifier-seqopt decl-specifier-seq abstract-declaratoropt = initializer-clause
答案 0 :(得分:2)
标准中有一个脚注
102)这意味着默认参数不会出现,例如,在 函数指针声明,函数引用或 typedef声明
例如这些声明
void f(void g(int = 10));
void ( *pf )(int = 10);
错了。