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_tint64_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/

10-14 11:25