我正在从 Java 过渡到 C++,并且对 long
数据类型有一些疑问。在 Java 中,要保存大于 2 32的整数,您只需编写 long x;
。但是,在 C++ 中,似乎 long
既是数据类型又是修饰符。
似乎有几种使用方法 long
:
long x;
long long x;
long int x;
long long int x;
此外,似乎还有以下内容:
long double x;
等等。
所有这些不同的数据类型有什么区别,它们的目的是否相同?
原文由 1110101001 发布,翻译遵循 CC BY-SA 4.0 许可协议
long
和long int
是相同的。long long
和long long int
也是如此。在这两种情况下,int
都是可选的。至于这两组之间的区别,C++ 标准规定了每组的最小范围,并且
long long
至少 与long
一样宽。标准的控制部分(C++11,但这已经存在了很长时间)例如
3.9.1 Fundamental types
,第 2 节(后面的部分给出了无符号整数类型的类似规则) :7.1.6.2 Simple type specifiers
中还有一个表 9,它显示了说明符到实际类型的“映射”(表明int
是可选的),其中一部分如下所示:请注意说明符和类型之间的区别。说明符是您告诉编译器类型是什么的方式,但您可以使用不同的说明符以最终获得相同的类型。
因此
long
本身既不是类型 也不 是修饰符,因为您的问题是,它只是long int
类型的说明符。同上long long
是long long int
类型的说明符。尽管 C++ 标准本身没有指定整数类型的最小范围,但它确实引用了 C99,在
1.2 Normative references
中应用。因此,C99 5.2.4.2.1 Sizes of integer types <limits.h>
中规定的最小范围是适用的。就
long double
而言,这实际上是一个浮点值而不是整数。与整数类型类似,它至少需要具有与double
一样高的精度,并提供该类型的值的超集(意味着 至少 这些值,不一定是 更多 值)。