该标准不允许链式隐式转换。如果允许,那么您可以编写这样的代码:
struct A
{
A(int i) //enable implicit conversion from int to A
};
struct B
{
B(const A & a); //enable implicit conversion from A to B
};
struct C
{
C(const B & b); //enable implicit conversion from B to C
};
C c = 10; //error
您不能指望 that10
将转换为A
which then 将转换为B
which then 转换为C
.
B b = 10; //error for same reason!
A a = 10; //okay, no chained implicit conversion!
B ba = A(10); //okay, no chained implicit conversion!
C cb = B(A(10)); //okay, no chained implicit conversion!
C ca = A(10); //error, requires chained implicit conversion
相同的规则适用于隐式调用的operator T()
隐式转换。
考虑到这一点,
struct B {};
struct A
{
A(int i); //enable implicit conversion from int to A
operator B(); //enable implicit conversion from B to A
};
struct C
{
C(const B & b); //enable implicit conversion from B to C
};
C c = 10; //error
您不能指望10
它将转换为A
然后将转换为B
(使用operator B()
)然后转换为C
。小号
不允许这种链式隐式转换。你必须这样做:
C cb = B(A(10); //okay. no chained implicit conversion!
C ca = A(10); //error, requires chained implicit conversion