转换序列中不允许使用已定义转换的情况

时间:2018-05-07 16:40:39

标签: c++ c++14 overloading c++17 implicit-conversion

看着这个:cppreference

我发现我几乎无法完全理解这一段:

  

禁止用户定义的转换(转换构造函数和用户定义的转换函数)参与隐式转换序列,以便可以应用多个用户定义的转换。具体来说,如果转换的目标是构造函数的第一个参数或用户定义的转换函数的隐式对象参数,并且构造函数/用户定义的转换是

的候选者,则禁止它们      
      
  • 通过用户定义的转换对类进行复制初始化,
  •   
  • 通过转换函数进行初始化,
  •   
  • 通过直接引用绑定的转换函数进行初始化,
  •   
  • 通过构造函数初始化,其中参数是类复制初始化中的临时函数,
  •   
  • 通过列表初始化进行初始化,其中初始化列表只有一个元素本身就是初始化列表,而目标是类X的构造函数的第一个参数,转换是X或引用(可能是cv-合格的)X
  •   

我想我理解这个想法,但案件对我来说似乎很奇怪。

下面给出了最后一个案例的例子,所以看起来很清楚。

但是,第一个子弹不是第4个特定情况吗?

任何类似的为什么提到第二和第三,当后者看起来(相当明显,如果我不是疯了)成为前者的特殊情况?

仅仅是为了强调某些案件,还是我误解了某些事情?

同样,第一个似乎与以下3个重叠......

为什么它不仅仅是'用户定义转换初始化的候选者'?对我而言似乎涵盖了所有情况(可能不一定如此,但绝对比编写的更简单)。

P.S。:对于这个问题的广泛性感到抱歉,我只是完全糊涂了这一点:)

0 个答案:

没有答案