【问题标题】:Bullet point [dcl.init]/7 (7.1)项目符号点 [dcl.init]/7 (7.1)
【发布时间】:2017-06-30 19:38:16
【问题描述】:

我了解[dcl.init]/7 (7.1)DR 1630 而相对于 C++14 发生了更改。但是 C++14 中出现的突出显示的句子(见下文)不应该继续存在于 C++1z 中吗?

[dcl.init]/7 (7.1):

如果 T 是(可能是 cv 限定的)类类型(第 12 条),则构造函数 被考虑。列举了适用的构造函数(16.3.1.3), 并且初始化器()的最佳选择是通过重载选择的 决议 (16.3)。如此选择的构造函数被调用,带有一个 空参数列表,用于初始化对象。

[dcl.init]/7 (7.1) in C++14(重点是我的):

如果 T 是(可能是 cv 限定的)类类型(第 9 条),则默认 T 的构造函数(12.1)被称为 (初始化是 如果 T 没有默认构造函数或重载决议,则格式错误 (13.3) 导致歧义或功能被删除或 无法从初始化的上下文中访问);

【问题讨论】:

  • 为什么要存在? DR 从段落中删除了该语言。

标签: c++ initialization c++14 language-lawyer c++17


【解决方案1】:

... 而初始化器 () 的最佳选择是通过重载决议 ...

重载解决方案已经暗示了所有被删除的内容。使用旧的措辞,在没有提及限制的情况下,它可以被理解为隐式允许调用不可访问的默认构造函数,但使用新的措辞,只需指定通常的规则适用就已经很清楚了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 2010-10-09
    相关资源
    最近更新 更多