标准说:( N3797::13.3.3.1/4 [over.best.ics]
)
但是,在考虑构造函数的参数时 用户定义的转换函数,它是13.3.1.3时的候选者 在第二步中调用临时复制/移动 通过初始化程序时,通过13.3.1.7进行类复制初始化 列表作为单个参数或初始化列表只有一个 元素和转换到某个类
X
或引用(可能 cv-qualified)X
被认为是构造函数的第一个参数X
,[...]仅考虑标准转换序列和省略号转换序列。
我们只关注以下情况中的第一个论点:
#include <iostream>
struct B;
struct C
{
C(){ }
C(const B&){ }
};
struct B
{
B(){ }
B(const C&){ }
};
struct A
{
A(const C&, const C&){ }
A(const B&){ }
};
B b;
C c;
A a{b, b};
int main(){ }
虽然我提供b
作为第一个参数,但不应用用户定义的转化B-->C
,但它有效。
答案 0 :(得分:0)
您有从B
到A
的转换以及从C
到B
的转换,但您正在尝试构建A
来自{B,C}
并且没有该表单的构造函数。 。
但是现在你完全把它归好了。 :)