<limits>和<climits> </climits> </limits>的等价性

时间:2009-03-17 06:05:57

标签: c++ c stl standards limits

  1. 这保证总是如此:

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

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

  2. 对于同时实现C99(至少long long部分)和C ++ 98的编译器,C99类型不是C ++ 98标准怎么样?我不确定是否可以保证这一切都是正确的:

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

    这是一个合理的假设吗?

4 个答案:

答案 0 :(得分:4)

我的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部分:“[脚注]不应包含要求。”虽然表格或数字的脚注可能是要求。

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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