首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包括<limits>跨平台吗?

包括<limits>跨平台吗?
EN

Stack Overflow用户
提问于 2015-06-07 02:23:24
回答 2查看 680关注 0票数 3

如果我要做:

代码语言:javascript
复制
int imin = std::numeric_limits<int>::min(); 
int imax = std::numeric_limits<int>::max();

无论哪个编译器/OS,还是这些值是依赖于实现的,我都会得到相同的值吗?

如果它们依赖于编译器/os,将使用我自己的常量:

代码语言:javascript
复制
  static unsigned short MAX_UNSIGNED_SHORT = 65535;
  static uint64_t MAX_UNSIGNED_64LONG = 18446744073709551615u;

引起问题;比如在32位机器上?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-07 02:43:38

这些值与实现有关(请参阅std::numeric_limits 这里的文档)。但是,标准保证它们能够表示不超过某个值的值(有关具体细节,请参阅这里 )。

使用自己的常量永远不会引起问题,只要常量在该类型的可表示值允许的范围内。在您的示例中,MAX_UNSIGNED_SHORTMAX_UNSIGNED_64LONG的值都属于各自类型的值。他们应该没事的。

另外,如果您使用定宽整数类型,那么对于特定类型的实现,std::numeric_limits::max的结果应该保持相同。(例如,std::numeric_limits<uint16_t>::max()将跨平台返回相同的值,而std::numeric_limits<uint64_t>::max()将跨平台返回相同的值,但返回std::numeric_limits<uint16_t>::max() != std::numeric_limits<uint64_t>::max()。)但是,正如@rci所指出的,根据标准,固定宽度类型是可选的,因此它们不一定存在于所有实现中。

票数 4
EN

Stack Overflow用户

发布于 2015-06-07 02:42:30

它们是依赖于实现的,int被标准定义为至少长到短,并且至少有16位。其他一切都由执行自行决定。现在,您通常会看到32位的整数。http://www.cplusplus.com/doc/tutorial/variables/

很难说它是否会引起问题,这取决于细节。您可以安全地使用16位的值。通常来说,亲手定义自己的极限并不是个好主意。

老实说,最好的做法是#包含cstdint,只需使用固定的大小类型,例如int32_t,这必须是一个特定的大小。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30689467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档