簡體   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