子弹点[dcl.init] / 7(7.1)

时间:2017-06-30 19:38:17

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

我理解[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)。这样选择的构造函数被调用,带有   空参数列表,用于初始化对象。

C ++ 14中的

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

  

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

1 个答案:

答案 0 :(得分:5)

  

...初始化程序()的最佳选择是 通过重载解析 ......

重载分辨率已经暗示了所有被删除的内容。使用旧的措辞,没有提到的限制,它可以被隐含地读取,允许调用不可访问的默认构造函数,但是使用新的措辞,通过简单地指定通常的规则适用已经很清楚。