【发布时间】:2011-11-19 09:23:28
【问题描述】:
我最近了解到,C/C++ 中的long 与int 的长度相同。简单地说,为什么?甚至在语言中包含数据类型似乎几乎毫无意义。它有没有 int 没有的特定用途?我知道我们可以像这样声明一个 64 位的 int:
long long x = 0;
但是为什么语言选择这样做,而不是仅仅使long 好...比int 更长?其他语言(例如 C#)可以做到这一点,那么为什么不使用 C/C++?
【问题讨论】:
-
我们使用u8、s16、s32、u64等类型的原因
-
“C/C++ 中的 long 与 int 的长度相同。”不总是。 C++ 标准规定
int是处理器的“自然”大小,它可能并不总是像long一样大。该标准还保证long至少与int一样长,因此并不总是保证它们大小相等。 -
历史和建筑包袱。相信我,像你这样假设
int和long总是相同的大小可能会受到伤害;当我们过渡到 64 位架构时,我目前正在修复我们的一个 C++ 静态库中的大量可移植性问题 -
实际上,
sizeof(long) == sizeof(int)仅在 32 位架构或 64 位 Windows 上使用,这对于习惯了sizeof(long) == sizeof(void *)的程序员来说是一个冲击。 -
我仍然觉得所有这些“长”和“短”的废话大多毫无意义。在这个架构上可能有这么长,在那个架构上可能有那么长,在另一个架构上可能还有另一个长度。完全不便携。 IMO 应该只有一个整数类型(当然有有符号和无符号的变体),如果你需要任何特定大小的东西,那么应该有类型(因为有)具有固定的、有保证的大小(即 uint8、 uint16 等)。
标签: c++ c integer long-integer