基本类型

时间:2010-03-12 10:45:25

标签: c++ types standards

我一直认为以下类型是“基本类型”,所以我认为我对这个question的回答是正确的,但令人惊讶的是它被推翻了......

在网上搜索时,我找到了this。所以,IBM也说这些类型是基本类型..

那你怎么解释这个标准? 根据C ++标准,是否有以下类型(和类似类型),“基本类型”

unsigned int
signed char
long double
short int
unsigned short int

编辑:
再次与此question相关: Comceau和gcc不会将“long double”,“short int”或“unsigned int”等类型视为“基本类型”! (而ibm,intel和microsoft编译器......) 如果他们确实将这些类型视为基本类型,则应编译以下代码:short int i = short int()

编辑:
删除了long long类型,因为我忘了他们还没有正式标准..

4 个答案:

答案 0 :(得分:5)

当前的ISO C ++ 03标准不支持

long long。但是,C ++ 0x草案标准确实包含以下类型:

  

3.9.1基本类型

     

2 有五种标准的有符号整数类型:“signed char”,“short”   int“,”int“,”long int“和”long“   long int“。

ISO C99添加了这种特定的数据类型(尽管这在许多编译器中可用作非标准扩展)。 C ++ 03并不完全支持所有C99功能。然而,相当多的C ++编译器允许将其作为扩展(例如,Comeau需要--long_long)。

答案 1 :(得分:4)

您的其他答案中的逻辑错误已经被其他人解释过了。让我再次向你解释一下这个陈述:

  

simple-type-specifiers指定先前声明的用户定义类型或基本类型之一。

这并不意味着所有基本类型都有简单类型说明符。它只是意味着每个简单类型说明符(或其组合 - 我认为这句话不是很清楚)指定用户定义的类型或基本类型之一。该声明也适用于以下“样本说明符”:

sample-specifier:
  int
  class-name

我的每个样本说明符都指定一个先前声明的用户定义类型,或者一个基本类型(在我的例子中,它是int)。这并不意味着可以表示所有先前声明的用户定义类型,也不意味着可以表示所有基本类型。现在,如果标准中的另一段说明type()适用于type是一个简单类型说明符,那么这并不意味着它也必须适用于这些组合。这是一个完全无效的结论。

就像当我说“十进制数字专门指定从0到9的数字”而你说“你错了,因为他们不能指定数字10”。但你所做的是采取两位数的组合然后声称我从未说过的东西。我认为这是一个非常明确的逻辑谬误。

答案 2 :(得分:1)

事实上,unsigned / long / short是int类型的变体。因此,您可以将这些关键字的任意组合组合在一起(如unsigned short int);

但很久还没有标准:它得到了许多编译器的支持,并且将成为C ++ 0x(即将推出的标准)的标准版。

答案 3 :(得分:0)

我刚刚查看了标准N3035的最新草案,它包含了一个附加表(第7.1.6.2节),其中列出了所有有效的简单类型说明符,并显示{ {1}}和类似的类型实际上是简单类型说明符的组合。

unsigned int