我一直认为以下类型是“基本类型”,所以我认为我对这个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
类型,因为我忘了他们还没有正式标准..
答案 0 :(得分:5)
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