[英]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.