这是否保证总是正确的:
std::numeric_limits<int>::max() == INT_MAX
C++ 标准对此有何评论?我在标准中找不到任何明确说明这一点的参考资料,但我一直在读那些应该是等价的。
long long
对于同时实现 C99(至少部分)和 C++98的编译器,不在 C++98 标准中的 C99 类型呢?我不确定是否有任何保证这始终成立:std::numeric_limits<unsigned long long>::max() == ULLONG_MAX
这是一个合理的假设吗?
4 回答
我的 C++ 2003 标准副本说numeric_limits<>::max()
andmin()
模板将返回值:
相当于
CHAR_MIN, SHRT_MIN, FLT_MIN, DBL_MIN,
等相当于
CHAR_MAX, SHRT_MAX, FLT_MAX, DBL_MAX,
等
但是,这些都在脚注中。ISO/IEC 指令第 3 部分:“[脚注] 不应包含要求。” 尽管表格或图表的脚注可能是要求。
第一个应该保证是真的:std::numeric_limits<int>::max() == INT_MAX
.
但是,对于 unsigned long long,没有任何保证,因为编译器/库不需要支持它们。但...
如果您的编译器和库支持 unsigned long long,它应该是相等的,因为无论您如何询问,类型的限制都是相同的。
是的,这是一个合理的假设。
C++ 中显然不能保证 long long 数据类型,因为 long long 数据类型在 C++ 中尚不存在。它们的行为方式(如果存在以及何时存在)取决于编译器,并且应该由编译器记录。
虽然据我所知,它不是任何一个标准的一部分,但它肯定是一个合理的假设,特别是如果您拥有来自同一套件或供应商的编译器。例如,G++ 4.3 仅使用<limits>
in 中的 #defined 值<climits>
。