簡體   English   中英

C ++編譯時整數變量的最小值和最大值

[英]Min and Max values for integer variable at compile time in C++

有一種簡單,干凈的方法可以在編譯時確定某些變量(此時是未知的)整數變量或類型的最大值和最小值嗎? 使用模板?

例如:

// Somewhere in a large project is:
typedef unsigned long XType;
typedef char YType;
// ...

// Somewhere else
   XType a;
   YType b;
   LONGLONG c,d,e,f;
   c = MinOfType(a); // Same as c = 0;
   d = MaxOfType(a); // Same as d = 0xffffffff;
   e = MinOfType(b); // Same as e = -128;
   f = MaxOfType(b); // Same as f = 127;
// Also would be nice
   e = MinOfType(YType); // Same as e = -128; // Using the typename directly
// Or perhaps
   e = MinOfType<YType>(); // Same as e = -128; // Using the typename directly

使用std :: numeric_limits,它就是這種類型的要求。 您可以查看此示例以了解用法。

看到這個問題int的最大值 - 你也可以在答案使用“max”的地方使用“min”

如果您可以訪問c ++ 11,則可以使用decltypestd::numeric_limits的組合。 重寫示例代碼如下所示:

#include <limits>

typedef unsigned long XType;
typedef char YType;

XType a;
YType b;
LONGLONG c,d,e,f;
c = std::numeric_limits< decltype(a) >::min(); // Same as c = 0;
d = std::numeric_limits< decltype(a) >::max(); // Same as d = 0xffffffff;
e = std::numeric_limits< decltype(b) >::min(); // Same as e = -128;
f = std::numeric_limits< decltype(b) >::max(); // Same as f = 127;
e = std::numeric_limits< YType >::min(); // Same as e = -128; // Using the typename directly

decltype將從表達式中提取類型,在這種情況下阻止變量類型,並允許您在其他期望類型(如模板)的位置使用它。 這一切都發生在編譯時,以便您可以將其分配給constexpr

constexpr decltype(a) g = std::numeric_limits< decltype(a) >::min();

這里ga類型相同,值為0,並且都在編譯時確定。

包含標題<limits>以到達模板類std::numeric_limits 變量的數字類型用於查找該模板類的特化,該模板類將通過函數max()提供最大值,並通過min()提供min() ,此外還有該類型的其他幾個方面。

請注意,對於整數和浮點類型, 最小值的解釋是不同的。 對於前者,它是有符號類型的最負值,對於無符號類型是零,但對於后者,它是最小的可表示值,非常接近於零。

暫無
暫無

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

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