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