long xx = ..; //is xx in range of an int type?
我想出瓦特/在我的脑海里了这个问题,所以它不是一个真正的面试问题,因为有些人可能会问。
基本上我想编写代码来检查它没有使用<climits>
,例如INT_MIN
,INT_MAX
。如果不是不可能的话,什么是可移植的,最有效的方法呢?由于便携,我的意思是它不应该是实现定义或平台相关的,例如,一个字节不总是8位。
long xx = ..; //is xx in range of an int type?
我想出瓦特/在我的脑海里了这个问题,所以它不是一个真正的面试问题,因为有些人可能会问。
基本上我想编写代码来检查它没有使用<climits>
,例如INT_MIN
,INT_MAX
。如果不是不可能的话,什么是可移植的,最有效的方法呢?由于便携,我的意思是它不应该是实现定义或平台相关的,例如,一个字节不总是8位。
#include <limits>
long xx = 5432;
if(long(numeric_limits<int>::max()) > xx)
{
int x = static_cast<int>(xx);
//...
为什么不去前线?
long v = 1;
bool in_range = (int)v == v;
IIRC,超出范围的有符号整型转换是实现定义的行为。我仍然试图找到这个来源,虽然... – Mysticial 2012-02-21 16:24:50
对于值'1',我希望这每次都是真实的。 – 2012-02-21 16:27:13
@ Lol4t0:如果sizeof(long)> sizeof(int),将long转换为int可能是实现定义的。 --- C++ 2003 4.7积分转换 – 2012-02-21 16:27:29
会比较'的sizeof(int)的==的sizeof(长)'工作? – dasblinkenlight 2012-02-21 16:20:42
如果它们不相同将会怎样? – 2012-02-21 16:25:42
那么他们的范围是不一样的。 – dasblinkenlight 2012-02-21 16:27:03