隐式转换的优先级
priority of implicit conversions
我有两个可以互换的类。可以将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;
}
解决方案是这样做的A ab = q ? (A)a : (A)b;
,以这种方式明确施放您的代码试图隐式执行此操作。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 选择用于赋值初始化的转换函数的优先级
- 优先级队列实现为单一链接,无法更新插入的指针转换
- 隐式转换的优先级
- C++11 何时相对于运算符优先级进行算术类型转换
- 如何将 Java 优先级队列转换为 C++ 优先级队列
- 模板转换运算符优先级和恒常性
- C++中转换运算符之间的优先级
- 以C++和运算符优先级键入指向数组成员的强制转换指针
- (涉及显式)运算符和构造函数转换的优先级
- 流运算符和控制转换优先级
- C++:运算符<<隐式强制转换优先级
- 隐式类型转换优先级是如何确定的
- 在返回中C++类型转换优先级
- 用户定义的布尔值转换的优先级
- 将函数转换为确定从c#到c++的运算符优先级