C++ 什么';检查长类型数据是否在int范围内的便携式方法是什么?

C++ 什么';检查长类型数据是否在int范围内的便携式方法是什么?,c++,C++,例如: long xx = ..; //is xx in range of an int type? 我脑子里想的是这个问题,所以这不是你们中的一些人可能会问的面试问题 基本上,我想编写代码来检查它,不使用,例如INT\u MIN,INT\u MAX。如果不是不可能的话,最有效的便携式方法是什么 所谓可移植性,我的意思是它不应该是实现定义的或依赖于平台的,例如,一个字节并不总是8位。为什么不继续 long v = 1; bool in_range = (int)v == v; #包括 长

例如:

long xx = ..;  //is xx in range of an int type?
我脑子里想的是这个问题,所以这不是你们中的一些人可能会问的面试问题

基本上,我想编写代码来检查它,不使用
,例如
INT\u MIN
INT\u MAX
。如果不是不可能的话,最有效的便携式方法是什么


所谓可移植性,我的意思是它不应该是实现定义的或依赖于平台的,例如,一个字节并不总是8位。

为什么不继续

long v = 1; 
bool in_range = (int)v == v;
#包括
长xx=5432;
如果(长(数值限制::max())>xx)
{
int x=静态(xx);
//...

比较
sizeof(int)==sizeof(long)
会起作用吗?那么它们的范围就不一样了。那么你怎么知道长类型xx是否在int范围内?我不是问long的范围是否在int范围内。相反,当
sizeof(int)==sizeof(long)时,问题是:特定的长类型数据是否在int-type范围内;)
long xx
int yy
的范围相同;当
sizeof(int)!=sizeof(long)
,long xx
int yy
的范围不一样。我做了几次。你认为我遗漏了什么部分?IIRC,一个超出范围的有符号整数强制转换是实现定义的行为。尽管如此,我仍在试图找到它的源代码…对于
1
的值,我希望每次都是这样@Lol4t0:如果sizeof(long)>sizeof(int),那么将long转换为int可能是实现定义的。--C++2003 4.7整数转换但是如果值转换为int conside,则表示可以使用int类型的变量保存该值(船长这么说)。我们为什么要关心它是如何转换的呢?实现定义可以是“由处理器发出信号”。
#include <limits>

long xx = 5432;

if(long(numeric_limits<int>::max()) > xx)
{
    int x = static_cast<int>(xx);
    //...