如果我要做:
int imin = std::numeric_limits<int>::min();
int imax = std::numeric_limits<int>::max();无论哪个编译器/OS,还是这些值是依赖于实现的,我都会得到相同的值吗?
如果它们依赖于编译器/os,将使用我自己的常量:
static unsigned short MAX_UNSIGNED_SHORT = 65535;
static uint64_t MAX_UNSIGNED_64LONG = 18446744073709551615u;引起问题;比如在32位机器上?
发布于 2015-06-07 02:43:38
这些值与实现有关(请参阅std::numeric_limits 这里的文档)。但是,标准保证它们能够表示不超过某个值的值(有关具体细节,请参阅这里 )。
使用自己的常量永远不会引起问题,只要常量在该类型的可表示值允许的范围内。在您的示例中,MAX_UNSIGNED_SHORT和MAX_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所指出的,根据标准,固定宽度类型是可选的,因此它们不一定存在于所有实现中。
发布于 2015-06-07 02:42:30
它们是依赖于实现的,int被标准定义为至少长到短,并且至少有16位。其他一切都由执行自行决定。现在,您通常会看到32位的整数。http://www.cplusplus.com/doc/tutorial/variables/
很难说它是否会引起问题,这取决于细节。您可以安全地使用16位的值。通常来说,亲手定义自己的极限并不是个好主意。
老实说,最好的做法是#包含cstdint,只需使用固定的大小类型,例如int32_t,这必须是一个特定的大小。
https://stackoverflow.com/questions/30689467
复制相似问题