Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么MSVC会选择与-2147483648相同的长字符?_C++_Visual C++ - Fatal编程技术网

C++ 为什么MSVC会选择与-2147483648相同的长字符?

C++ 为什么MSVC会选择与-2147483648相同的长字符?,c++,visual-c++,C++,Visual C++,我的片段: auto i = -2147483648; int j = 3; std::swap(i, j); // Compile error about mismatched types here. 编译器声明文本i是long。为什么呢-2147483648适用于MSVC x64上的int 我的编译器是MSVC,目标是64位。< P>与流行的信念相反,-2147483648是不 >:C++不支持负的文字值。 事实上,它是一个编译时可计算的常量表达式,由2147483648字面值的一元求反

我的片段:

auto i = -2147483648;
int j = 3;
std::swap(i, j); // Compile error about mismatched types here. 
编译器声明文本
i
long
。为什么呢-2147483648适用于MSVC x64上的
int


<>我的编译器是MSVC,目标是64位。

< P>与流行的信念相反,-2147483648是<强>不<强> >:C++不支持负的文字值。 事实上,它是一个编译时可计算的常量表达式,由2147483648字面值的一元求反组成


在具有32位
int
s和
long
s的MSVC x64上,2147483648对于其中任何一个来说都太大,因此它会切换到您观察到的
long-long
类型。

@p45立即,30分钟前我们在C标记中遇到了相同的问题,以重复形式关闭。@p45立即,这就是我正在谈论的问题:我刚刚把那个问题投了更高的票。顺便说一下,我不在学校。我和芭丝谢芭一起工作。但这一个似乎转化为一个长期的。这是一个平台的差异。如果平台具有32位int和64位long(与64位linux一样),那么2147483648将被解释为long。如果平台的长度为32位(与64位windows一样),那么2147483648将被解释为long-long(标准要求long-long至少为64位)。问题本身实际上包含了OP遗漏的一条重要线索,即声称
i
是文字!相关的,为了好玩,请查阅编译器对
INT\u MIN
的定义。即使
INT
是32位,
INT\u MIN
也没有被定义为
(-2147483648)
,正是因为这个原因;欢迎发表意见。相关: