簡體   English   中英

如何區分unsigned int和uint32_t

[英]How to distinguish unsigned int from uint32_t

我需要找到所有使用uint32_t以外的size代碼。 我用自己的uint32_t制作了自定義的SizeStub類型。 並開始代碼替換。 為了避免我已經擁有uint32_t代碼的錯誤警報,我添加了下一個運算符:

template <typename T>
SizeStub& operator += (const T& in)
{
    static_assert(std::is_same<T, decltype(_value)>::value, "NOT SAME");
    this->_value += in;
    return *this;
}

二進制運算符等

一切都很棒。 我有除了uin32_t和... unsigned int之外的所有類型的編譯時警報。 所以。 如何區分unsigned int哪個不是固定大小?

gcc版本4.8.2

PS當我將所有編譯時警報修復到uint32_t時,計划是替換所有SizeStub使用。

uint32_t是(afaik always)您編譯的平台上可用的無符號32位整數類型的typedef。

在你的情況下, uint32_t是通過typedef unsigned int uint32_t;定義的typedef unsigned int uint32_t;

因此uint32_tunsigned int類型相同,只是使用其他名稱。

編輯:在我完成之前意外提交...

您可能有一些實現目標的可能性:

  1. 您可以切換到uint32_tunsigned int類型不同的平台。 這可能有用,但你需要小心。 例如,如果您使用MSVC作為編譯器, unsigned int始終是32位無符號整數類型 - 無論是針對32位還是64位進行編譯。
  2. 您可以嘗試將uint32_t重新定義為可以處理(賦值,強制轉換,...​​) unsigned int類型的值的不同類型。 這會讓你意識到不可靠的情況......然而,在代碼中找到正確的位置以重新定義uint32_t可能很復雜,因此編譯器將在你希望它失敗的所有情況下失敗。
  3. 除了2:你可以臨時(!)改變原來的typedef。 也許您想要建立一個單獨的構建環境來執行此操作,因此您的“真實”構建環境不會受其影響。

也許有人可以提出更好的解決方案。

如果unsigned int是32位,那么它和uint32_t相同的類型 你不能區分一種類型。

由於uint32_t只是一個類型別名,因此與typedef xy ,你無法區分xy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM