3
  1. 这是否保证总是正确的:

    std::numeric_limits<int>::max() == INT_MAX
    

    C++ 标准对此有何评论?我在标准中找不到任何明确说明这一点的参考资料,但我一直在读那些应该是等价的。

  2. long long对于同时实现 C99(至少部分)和 C++98的编译器,不在 C++98 标准中的 C99 类型呢?我不确定是否有任何保证这始终成立:

    std::numeric_limits<unsigned long long>::max() == ULLONG_MAX
    

    这是一个合理的假设吗?

4

4 回答 4

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 部分:“[脚注] 不应包含要求。” 尽管表格或图表的脚注可能是要求。

于 2009-03-17T06:15:04.517 回答
2

第一个应该保证是真的:std::numeric_limits<int>::max() == INT_MAX.

但是,对于 unsigned long long,没有任何保证,因为编译器/库不需要支持它们。但...

如果您的编译器和库支持 unsigned long long,它应该是相等的,因为无论您如何询问,类型的限制都是相同的。

是的,这是一个合理的假设。

于 2009-03-17T06:14:08.777 回答
1

C++ 中显然不能保证 long long 数据类型,因为 long long 数据类型在 C++ 中尚不存在。它们的行为方式(如果存在以及何时存在)取决于编译器,并且应该由编译器记录。

于 2009-03-17T11:31:10.310 回答
0

虽然据我所知,它不是任何一个标准的一部分,但它肯定是一个合理的假设,特别是如果您拥有来自同一套件或供应商的编译器。例如,G++ 4.3 仅使用<limits>in 中的 #defined 值<climits>

于 2009-03-17T06:18:16.583 回答