隐式转换的优先级

时间:2017-12-07 18:53:12

标签: c++ implicit-conversion

我有两个可互换的类。 A可以转换为B,B可以转换为A.我想要的是指定A转换为B的首选方式,但仍然可以执行以下操作:

B b = A();
B b; b = A();

我想避免的是这个问题:     B b = q? A():B();

错误:条件表达式不明确; 'A'可以转换为'B',反之亦然

我尝试了一系列显式设置,但我无法弄清楚这是否可行。我更喜欢不必在这些上调用static_cast。

struct B;
struct A {
    int a;
    A () {
    }
    A (B b);
    explicit operator B ();
};
struct B {
    int b;
    B () {
    }
    B (A a);
    explicit operator A ();
};
A::A (B b) {
}
A::operator B () {
    B b;
    return b;
}
B::B (A a) {
}
B::operator A () {
    A a;
    return a;
}
int main () {
    int q;
    A a;
    B b;
    A ab = q ? a : b;
    B b2 = a;
}

1 个答案:

答案 0 :(得分:0)

解决方案是执行此操作A ab = q ? (A)a : (A)b;,这样就可以显式地转换每个代码,而代码会尝试隐式执行此操作。