【发布时间】:2017-10-23 22:32:00
【问题描述】:
[dcl.fct.default]/3(重点是我的):
默认参数只能在 函数声明的参数声明子句或 lambda-declarator 或模板参数 (14.1);在后者 在这种情况下,initializer-clause 应该是一个赋值表达式。一种 不应为参数包指定默认参数。 如果是 在参数声明子句中指定,它不应发生 在 a 的声明符或抽象声明符中 参数声明。
上面最后一句说,如果在参数声明子句中指定了默认参数,则它不应出现在参数声明的声明符或抽象声明符中。然而,当我查看参数声明的定义时,我在[dcl.fct]/3 中发现了以下内容(重点是我的):
参数声明:
属性说明符序列选择 decl 说明符序列 声明者
属性说明符-seqopt decl-specifier-seq 声明符 = 初始化子句
属性说明符序列选择 decl 说明符序列 抽象声明器选择
属性说明符序列选择 decl 说明符序列 abstract-declaratoropt = 初始化子句
【问题讨论】:
标签: c++ language-lawyer declaration default-arguments