uint64_t source = numeric_limits<uint64_t>::max();
int64_t target = source;
BOOST_CHECK(source != target);//THIS SHOULD CHECK AS true - target != source
此检查失败,但应该通过-源与目标不同。
最佳答案
是的,它们是不同的,但是当使用!=
比较它们时,通常的算术转换将应用于它们。这意味着两个值都转换为相同的数据类型。
ISO C99(适用于C,但C++非常相似)在6.3.1.8常规算术转换中定义:
uint64_t
和int64_t
具有相同的等级,因此将两个值都转换为uint64_t
,并且表达式等效于(uint64_t) source != (uint64_t) target
。
要获得所需的结果,可以检查source == target && (source < 0) == (target < 0)
。
关于c++ - BOOST_CHECK错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5692882/