c++将 union 转换为其成员类型之一

标签 c++ casting unions

以下内容对我来说似乎完全合乎逻辑,但不是有效的 c++。 union 不能隐式转换为其成员类型之一。有谁知道不这样做的充分理由吗?

union u {
  int i;
  char c;
}
function f(int i) {
}
int main() {
  u v;
  v.i = 6;
  f(v);
}

谁能提出一个干净的替代方案(我能想到的最干净的是 f(v.i);,我承认它非常干净,但上面的看起来更干净)

最佳答案

虽然同意 Crazy Eddie 的观点,它在我看来并没有那么好,但实际上您可以通过定义它来获得隐式转换:

union u {
    int i;
    char c;
    operator int () const { return i; }
    operator char () const { return c; }
};

关于c++将 union 转换为其成员类型之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5060177/

相关文章:

c++ - 有没有办法让 Visual Studio 停止缩进命名空间?

c++ - -1u 是有效的 C++ 吗?

c++ - 有人可以解释这个 C++ union 示例吗?

c++ - 将 pimpl 与模板类和显式实例化模板一起使用

c++ - 用项目 C++ 填充 QTreeview

casting - 如何将Vec <&mut T>转换为Vec <&T>?

tsql - 将带有逗号分隔符的 nVarChar 转换/转换为十进制

java - 如何在 Java 中进行直接替换

c - 无类型 union (没有类型标签)有什么用处吗?

在 union 中组合指针和整数