提升线程代码~uintmax_t(0)

时间:2012-02-06 10:18:27

标签: c++ boost

bool is_sentinel() const
{
    return milliseconds==~uintmax_t(0);
}

我在thread_data.hpp中找到了这行代码,我想知道为什么它是~uintmax_t(0)而不是-1

修改

如果原因是为了避免编译器警告,为什么不使用:

std::numeric_limits(decltype(milliseconds)>::max()

3 个答案:

答案 0 :(得分:2)

首先使用uintmax_t的一个原因是我们不知道最大类型是什么。是unsigned long还是unsigned long long

我的猜测是,使用~uintmax_t(0)生成一个大的无符号值只会在最大数量的编译器上产生最少的警告数。

如果混合使用有符号值和无符号值,或者对无符号值(-1ull)使用减号,编译器通常会发出警告(?)给出无符号结果。

答案 1 :(得分:1)

~uintmax_t(0)是生成类型uintmax_t的全1值的最简单方法,它不会产生编译器警告。

答案 2 :(得分:0)

由于milliseconds是无符号的,因此将其与-1进行比较是没有任何意义的。