簡體   English   中英

編譯時檢查變量是否有符號

[英]Compile-time check that a variable is signed/unsigned

我正在嘗試提出一些編譯時方法來檢查某個變量是帶符號的還是無符號的。 實際上,我花了很長時間使用以下宏來檢查帶符號的變量:

#ifdef _DEBUG
#define CHECK_SIGNED(v) if((v) == -(v)){}
#else
#define CHECK_SIGNED(v)
#endif

然后以下將通過它:

INT rr = 0;
CHECK_SIGNED(rr);

而以下:

UINT rr = 0;
CHECK_SIGNED(rr);

將產生一個編譯時錯誤:

錯誤C4146:一元減運算符應用於無符號類型,結果仍為無符號

因此,現在我試圖為unsigned變量提出類似的檢查。 有什么建議么?

PS。 盡管我使用的是VS 2017但最好使其與舊的C ++標准向后兼容。

可以使用這樣的東西:

static_assert(std::is_signed<decltype(rr)>::value, "Not signed number");

和姐妹版本std::is_unsigned

此外,對於支持舊的編譯器,要靠自己實現並不是很困難。

暫無
暫無

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

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