2010-04-17 86 views

回答

6

在1998标准中,long intunsigned long int是至少与任何标准的其他整型(§3.9.1/ 2-3)一样大的类型。 (它们可能是也可能不是“最大”的类型,例如long int的大小可能与int相同,因此char的大小也可能相同)。浮点数long double至少提供了与其他两种浮点类型(§3.9.1/ 8)一样精确。

在C++ 0x(n3092)草案标准中,类型为long long intunsigned long long int(§3.9.1/ 2-3)。最精确的浮点类型仍然是long double(§3.9.1/ 8)。

实现可以提供超出标准要求的更大类型。查看文档以获取有关的详细信息。

+2

但是,C++ 0x有'',所以intmax_t和uintmax_t是最大的整数类型。 – 2010-04-17 11:35:21

+0

只是为了记录,标准确实规定了最小尺寸,所以'long int'永远不能和char相同。从内存中,一个'int'必须至少有16位宽,'long int'至少有32个。 – jalf 2010-04-17 12:05:37

+0

而在C++ 0x中,即使像'sizeof'这样的操作和事物可能产生的类型甚至比'unsigned long long“,但在C++ 03中不是这样。 – 2010-04-17 13:32:59

1

在C++ 03中,long [int]unsigned long [int]具有最大的整数范围,并且long double具有最大的FP精度和范围。

在C++ 0x,intmax_tuintmax_t中积分范围最大,甚至可能大于long long。例如,对于一个实现来说,合理的做法是使得64位的数字为longlong long,并使128位数为intmax_t

intmax_t只是从C99被采用,所以如果你的实现支持C99,你不需要C++ 0x。只需包括stdint.h而不是cstdint。无论如何,使用“C风格”头文件是完全安全的,尽管我不确定是否有一种很好的方法来检查C++中的C99 typedefs。

精确或方便地命名的浮点类型不是在C99或C++ 0x中引入的,因此如果需要可移植性,请避免使用类似float64_tfloatmax_t的东西。

+2

我仍然认为'intmax_t'应该被命名为'longgest long int'。 – 2010-04-18 04:31:09

相关问题