我不明白[dcl.fct.default] / 3

时间:2017-05-23 19:50:13

标签: c++ language-lawyer declaration default-arguments

[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

1 个答案:

答案 0 :(得分:2)

标准中有一个脚注

  

102)这意味着默认参数不会出现,例如,在   函数指针声明,函数引用或   typedef声明

例如这些声明

void f(void g(int = 10));

void ( *pf )(int = 10);

错了。