C++ 并集值的单函数比较

C++ 并集值的单函数比较,c++,unions,C++,Unions,我有一个union定义如下: union V64 { double f64; __int64 i64; unsigned __int64 u64; }; 我想对未知类型的8字节值与已知类型的另一个V64进行惰性比较(相等和不相等)。比较两个V64s的i64是否会一致地给出预期结果,而不管底层类型如何?例如: V64 a.u64 << 9007199254740993+500; //pseudo-code reading raw bytes V64 b.u6

我有一个
union
定义如下:

union V64
{
    double f64;
    __int64 i64;
    unsigned __int64 u64;
};
我想对未知类型的8字节值与已知类型的另一个
V64
进行惰性比较(相等和不相等)。比较两个
V64
s的
i64
是否会一致地给出预期结果,而不管底层类型如何?例如:

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*/}

V64 a.u64分配给相同类型的两个成员后,可以对它们进行比较:

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

if (a.f64 < b.f64) { /* ... */ }
a.f64=5.0;
b、 f64=-1.0;
如果(a.f64

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

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

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

if (a.f64 < b.f64) { /* ... */ }
a.f64=5.0;
b、 f64=-1.0;
如果(a.f64

您只能读取上次写入的工会成员。因此,您可以比较
a.f64
c.u64
,但这只会将这两个值提升到
double

,它甚至不会编译!编辑了我的问题,删除了不重要的部分。它甚至没有编译!编辑了我的问题,删除了不重要的部分。谢谢你的回复。你说我只能读上一次写信给的成员是什么意思?请参阅我的问题编辑部分以获得一些澄清。@Phlucious:阅读一个不活跃的工会成员(即不是最后一个被写信给的任何人)是未定义的行为。啊,我明白了。所以,即使它似乎在MSVC2010上工作,它可能在gcc上不工作?另外,我刚刚修复了示例中的一个打字错误。那么,对于真正“正确”的代码,有什么替代方案呢?
void*
重新解释演员阵容
?@Phlucious:照你说的去做,那没有意义。你怎么知道你读的是int还是double?一旦你知道了这一点,其他的一切都会安排妥当(即直接阅读正确的类型)。谢谢你的回复。你说我只能读上一次写信给的成员是什么意思?请参阅我的问题编辑部分以获得一些澄清。@Phlucious:阅读一个不活跃的工会成员(即不是最后一个被写信给的任何人)是未定义的行为。啊,我明白了。所以,即使它似乎在MSVC2010上工作,它可能在gcc上不工作?另外,我刚刚修复了示例中的一个打字错误。那么,对于真正“正确”的代码,有什么替代方案呢?
void*
重新解释演员阵容
?@Phlucious:照你说的去做,那没有意义。你怎么知道你读的是int还是double?一旦你知道了这一点,其他的一切都会到位(即,直接读入正确的类型)。