考虑到以下语句 return , C++ 中的和类型4
有什么区别?int
long
sizeof(int)
sizeof(long)
从这个参考:
int 最初旨在成为处理器的“自然”字长。许多现代处理器可以同样轻松地处理不同的字长。
另外,这一点:
在许多(但不是全部)C 和 C++ 实现中,long 大于 int。当今最流行的桌面平台,例如 Windows 和 Linux,主要在 32 位处理器上运行,并且这些平台的大多数编译器都使用 32 位 int,其大小和表示形式与 long 相同。
标准给你的保证是这样的:
1 == sizeof(char) <= sizeof(short) <= sizeof (int) <= sizeof(long) <= sizeof(long long)
所以它对平等是完全有效的sizeof (int)
,sizeof (long)
许多平台选择采用这种方法。你会发现一些平台int
有 32 位、long
64 位和long long
128 位,但 4 位似乎很常见sizeof (long)
。
(请注意,long long
从 C99 开始,它在 C 中被识别,但通常在 C++11 之前的 C++ 中作为扩展实现。)
您使用的是 32 位计算机或 64 位 Windows 计算机。在我的 64 位机器上(运行 Unix 衍生操作系统,而不是 Windows)sizeof(int) == 4
,但是sizeof(long) == 8
.
它们是不同的类型——有时大小相同,有时不同。
(在过去的日子里,sizeof(int) == 2
虽然sizeof(long) == 4
那可能是 C++ 存在之前的日子,但想想看。不过,从技术上讲,它是一个合法的配置,尽管在嵌入式空间之外是不寻常的,甚至在嵌入式领域也很可能是不寻常的嵌入空间。)
在它们都具有相同大小的平台上,答案是什么。它们都代表有符号的 4 字节值。
但是,您不能相信这是真的。标准没有明确定义 long 和 int 的大小。编译器可以给类型不同的大小,从而打破这个假设。
long 必须至少与 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;