C ++将联合强制转换为其成员类型之一 [英] c++ casting a union to one of its member types
本文介绍了C ++将联合强制转换为其成员类型之一的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
以下对我来说似乎很合乎逻辑,但不是有效的c ++.联合不能隐式转换为其成员类型之一.有人知道为什么不这么做吗?
The following seems perfectly logical to me, but isn't valid c++. A union cannot be implicitly cast to one of it's member types. Anyone know a good reason why not?
union u {
int i;
char c;
}
function f(int i) {
}
int main() {
u v;
v.i = 6;
f(v);
}
任何人都可以提出一个更干净的选择(我可以想到的最干净的是 f(vi);
,我承认这是非常干净的,但是以上内容看起来更干净)
And can anyone suggest a clean alternative (the cleanest I can come up with is f(v.i);
, which I admit is very clean, but the above just seems even cleaner)
推荐答案
虽然同意Crazy Eddie的看法,但对我来说看起来并不好,您实际上可以通过定义隐式转换来获得它:
While agreeing with Crazy Eddie that it doesn't look that better to me you can actually get an implicit conversion by defining it:
union u {
int i;
char c;
operator int () const { return i; }
operator char () const { return c; }
};
这篇关于C ++将联合强制转换为其成员类型之一的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文