47

考虑到以下语句 return , C++ 中的和类型4有什么区别?intlong

sizeof(int)
sizeof(long)
4

6 回答 6

53

这个参考:

int 最初旨在成为处理器的“自然”字长。许多现代处理器可以同样轻松地处理不同的字长。

另外,这一点:

在许多(但不是全部)C 和 C++ 实现中,long 大于 int。当今最流行的桌面平台,例如 Windows 和 Linux,主要在 32 位处理器上运行,并且这些平台的大多数编译器都使用 32 位 int,其大小和表示形式与 long 相同。

于 2009-05-22T22:20:38.933 回答
45

标准给你的保证是这样的:

1 == sizeof(char) <= sizeof(short) <= sizeof (int) <= sizeof(long) <= sizeof(long long)

所以它对平等是完全有效的sizeof (int)sizeof (long)许多平台选择采用这种方法。你会发现一些平台int有 32 位、long64 位和long long128 位,但 4 位似乎很常见sizeof (long)

(请注意,long long从 C99 开始,它在 C 中被识别,但通常在 C++11 之前的 C++ 中作为扩展实现。)

于 2009-05-22T22:59:04.423 回答
17

您使用的是 32 位计算机或 64 位 Windows 计算机。在我的 64 位机器上(运行 Unix 衍生操作系统,而不是 Windows)sizeof(int) == 4,但是sizeof(long) == 8.

它们是不同的类型——有时大小相同,有时不同。

(在过去的日子里,sizeof(int) == 2虽然sizeof(long) == 4那可能是 C++ 存在之前的日子,但想想看。不过,从技术上讲,它是一个合法的配置,尽管在嵌入式空间之外是不寻常的,甚至在嵌入式领域也很可能是不寻常的嵌入空间。)

于 2009-05-22T22:21:04.517 回答
4

在它们都具有相同大小的平台上,答案是什么。它们都代表有符号的 4 字节值。

但是,您不能相信这是真的。标准没有明确定义 long 和 int 的大小。编译器可以给类型不同的大小,从而打破这个假设。

于 2009-05-22T22:18:44.053 回答
3

long 必须至少与 int 大小相同,并且可能(但不一定)更长。

在常见的 32 位系统上,int 和 long 都是 4 字节/32 位,根据 C++ 规范这是有效的。

在其他系统上,int 和 long long 的大小可能不同。我曾经在一个平台上工作,int 是 2 字节,long 是 4 字节。

于 2009-05-22T22:23:07.587 回答
2

一个典型的最佳实践是不直接使用 long/int/short。相反,根据编译器和操作系统的规范,将它们包装到头文件中,以确保它们准确地保存您想要的位数。然后使用 int8/int16/int32 而不是 long/int/short。例如,在 32 位 Linux 上,您可以像这样定义一个标头

typedef char int8;
typedef short int16;
typedef int int32;
typedef unsigned int uint32;
于 2013-05-28T01:44:30.023 回答