Union值的单功能比较

时间:2013-04-18 19:40:59

标签: c++ unions

我的union定义如下:

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

我想对未知类型的8字节值与已知类型的另一个V64进行惰性比较(相等和不等)。比较两个i64的{​​{1}}是否会始终给出预期的结果,无论基础类型如何?例如:

V64

比较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分解,当值超过double's int storage (2^53 +1)时,f64就会分解。比较i64似乎有效,但可能有一个案例我没有考虑过。

1 个答案:

答案 0 :(得分:4)

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

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

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

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