这保证总是如此:
std::numeric_limits<int>::max() == INT_MAX
C ++标准对此有何评论?我在标准中找不到任何明确说明这一点的参考,但我继续读到那些应该是等价的。
对于同时实现C99(至少long long
部分)和C ++ 98的编译器,C99类型不是C ++ 98标准怎么样?我不确定是否可以保证这一切都是正确的:
std::numeric_limits<unsigned long long>::max() == ULLONG_MAX
这是一个合理的假设吗?
答案 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值。