【问题标题】:I don't understand the last sentence in [dcl.fct.default]/3我不明白 [dcl.fct.default]/3 中的最后一句话
【发布时间】: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


    【解决方案1】:

    标准中有一个脚注

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

    例如这些声明

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

    错了。

    【讨论】:

    • 我明白了。谢谢。
    猜你喜欢
    • 2019-08-21
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 2020-04-15
    相关资源
    最近更新 更多