C ++将联合强制转换为其成员类型之一 [英] c++ casting a union to one of its member types

查看:49
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆