考虑到以下语句返回4
,在C++中int
和long
类型之间的区别是什么?
sizeof(int)
sizeof(long)
根据这个参考文献:
int最初被设计为处理器的“自然”字长。许多现代处理器可以同等轻松地处理不同的字长。
此外,还有这段话:
在许多(但不是所有)C和C++实现中,long比int更大。今天最流行的桌面平台,例如Windows和Linux,主要运行在32位处理器上,大多数编译器使用与long相同大小和表示的32位int。
标准给你的保证如下:
1 == sizeof(char) <= sizeof(short) <= sizeof (int) <= sizeof(long) <= sizeof(long long)
因此,sizeof(int)
和sizeof(long)
相等是完全有效的,许多平台选择采用这种方法。您会发现一些平台上,int
为32位,long
为64位,long long
为128位,但sizeof(long)
为4似乎非常普遍。
(请注意,在C99中,long long
被认为是C的一部分,但在C++11之前,它通常作为C++的扩展实现。)
sizeof(char)==sizeof(short)
”,对吗? - Walter Trosssizeof(char) == sizeof(short) && sizeof(char) == sizeof(int) && sizeof(int) == 1
,而且这个大小至少为32位。 - Jonathan Leffler您的机器是32位或者64位的Windows机器。在我的64位机器上(运行Unix衍生操作系统,不是Windows),sizeof(int) == 4
,但是sizeof(long) == 8
。
它们是不同的类型 - 有时彼此大小相同,有时则不同。
(在很早的时候,sizeof(int) == 2
和sizeof(long) == 4
,尽管那可能是C ++出现之前的日子。尽管如此,在嵌入式空间以外,这可能是一个不寻常的合法配置,并且在嵌入式空间中也可能不寻常。)
sizeof(long)
大小,这并不是吹毛求疵。所以我支持Steve。 - Cookielong的长度至少与int相同,但可能会更长。
在通用的32位系统上,int和long都是4个字节/32位,这符合C++规范。
在其他系统上,int和long long的大小可能不同。我曾经在一个平台上工作,其中int为2个字节,而long为4个字节。
一种典型的最佳实践是不直接使用long/int/short。相反,根据编译器和操作系统的规范,将它们包装到头文件中,以确保它们恰好持有你所需要的位数。然后使用int8/int16/int32代替long/int/short。例如,在32位的Linux上,你可以定义一个像下面这样的头文件:
typedef char int8;
typedef short int16;
typedef int int32;
typedef unsigned int uint32;
<cstdint>
的标准头文件中,详见此处:http://en.cppreference.com/w/cpp/types/integer。 - jogojapan