繁体   English   中英

提升线程代码〜uintmax_t(0)

[英]boost thread code ~uintmax_t(0)

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

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

编辑:

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

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

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

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

如果您混合使用带符号和无符号值,或者在带符号的负值( -1ull )上使用减号会令人惊讶地出现(?),则通常会向编译器发出警告。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM