c++ - Union值的单函数比较

标签 c++ unions

我有一个 union 定义如下:

union V64
{
    double f64;
    __int64 i64;
    unsigned __int64 u64;
};

我想对未知类型的 8 字节值与已知类型的另一个 V64 进行惰性比较(相等和不等)。无论底层类型如何,比较两个 V64i64 是否始终如一地给我预期的结果?例如:

V64 a.u64 << 9007199254740993+500;  //pseudo-code reading raw bytes
V64 b.u64 << -9007199254740993-501; //pseudo-code reading raw bytes
if(a.i64 > b.i64)
{/*do stuff*/}

比较u64在1为负数时崩溃,f64在值超过double's int storage (2^53 +1)时崩溃.比较 i64 似乎可行,但可能有一种情况我没有考虑过。

最佳答案

分配给同一类型的两个成员后,您可以比较它们:

a.f64 = 5.0;
b.f64 = -1.0;

if (a.f64 < b.f64) { /* ... */ }

您只能读取最后写入的 union 成员。因此,您可以比较 a.f64c.u64,但这只会将两个值提升为 double

关于c++ - Union值的单函数比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16091682/

相关文章:

c++ - 调试自定义小部件

c++ - C++17 标准是否保证 union 的地址与其成员的地址相同?

c++ - 在 C++ 中为结构( union )创建构造函数

c - 结构错误中的 union

c++ - Visual Studio 中特定于 Qt 的构造的损坏缩进

c++ - 如何将数据附加到可执行文件并在此应用程序中使用它

c++ - std::bind pre-C++11 的替代方案

c++ - 复制分配 boost options_descriptions

c++ - 放置删除不受限制的 union

c - 共享相同第一成员的结构 union