和的等价性

  1. 这保证总是如此:

    std::numeric_limits::max() == INT_MAX 

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

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

     std::numeric_limits::max() == ULLONG_MAX 

    这是一个合理的假设吗?

我的C ++ 2003标准副本说, numeric_limits<>::max()min()模板将返回值:

相当于CHAR_MIN, SHRT_MIN, FLT_MIN, DBL_MIN,等。

相当于CHAR_MAX, SHRT_MAX, FLT_MAX, DBL_MAX,

但是,这些都在脚注中。 ISO / IEC指令第3部分:“[脚注]不应包含要求。” 虽然表格或数字的脚注可能是要求。

第一个应该保证为真: std::numeric_limits::max() == INT_MAX

但是,对于unsigned long long,由于编译器/库不需要支持它们,因此无法保证。 但…

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

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

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

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