和的等价性
-
这保证总是如此:
std::numeric_limits::max() == INT_MAX
C ++标准对此有何评论? 我在标准中找不到任何明确说明这一点的参考,但我继续读到那些应该是等价的。
-
对于同时实现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
。
但是,对于unsigned long long,由于编译器/库不需要支持它们,因此无法保证。 但…
如果您的编译器和库支持unsigned long long,那么它应该是相等的,因为无论您如何询问,类型的限制都是相同的。
是的,这是一个合理的假设。
显然不能保证C ++中的long long数据类型,因为C ++中还不存在long long数据类型。 它们如何以及何时存在的行为取决于编译器,并且应该由编译器记录。
虽然据我所知,它不是任何标准的一部分,但它肯定是一个合理的假设,特别是如果你有来自同一套件或供应商的编译器。 例如,G ++ 4.3只使用
中
的#defined值。