代码之家  ›  专栏  ›  技术社区  ›  smerlin

基本类型

  •  2
  • smerlin  · 技术社区  · 14 年前

    我一直认为下面的类型是“基本类型”,所以我认为我的答案是 question 是对的,但令人惊讶的是,它被否决了…

    搜索网页,我发现 this . 所以,IBM也说这些类型是基本类型。

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

    unsigned int
    signed char
    long double
    short int
    unsigned short int
    

    编辑:
    再次与此相关 问题 : comceau和gcc不将“long double”、“short int”或“unsigned int”等类型视为“基本类型”!(而IBM、Intel和Microsoft编译器是这样做的.. 如果它们确实将此类类型视为基本类型,则应编译以下代码: short int i = short int()

    编辑:
    远离的 long long 类型,我忘记了它们还没有正式的标准。

    4 回复  |  直到 14 年前
        1
  •  4
  •   Johannes Schaub - litb    14 年前

    另一个答案中的逻辑错误已经被其他人解释过了。为了让我再向你解释一次,鉴于此声明:

    简单类型说明符指定以前声明的用户定义类型或基本类型之一。

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

    sample-specifier:
      int
      class-name
    

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

    就像我说的“十进制数字只指定0到9之间的数字”,你说“你错了,因为他们不能指定数字10”。但你要做的是把两个数字组合起来,然后说出我从未说过的话。我认为这是一个非常明确的逻辑谬论。

        2
  •  5
  •   dirkgently    14 年前

    long long 不受当前ISO C++ 03标准的支持。但是,C++ 0x草稿标准也包括这种类型:

    3.9.1基本类型

    有五种标准有符号整数类型:__signed char__、__short int_157;、_156;int_157;、__long int_157;和__long 长INT-π。

    iso c99添加了这种特殊的数据类型(尽管它在许多编译器上作为非标准扩展提供)。C++ 03并不完全支持所有的C99特征。然而,相当多的C++编译器确实将此作为扩展(例如COMMO要求)。 --long_long )

        3
  •  1
  •   Klaim    14 年前

    事实上,无符号/长/短是int类型的变体。因此,您可以将这些关键字组合在一起使用(如无符号短整型);

    但是长的还没有标准:它由许多编译器支持,并且将在C++ 0x(即将到来的标准)中成为标准。

        4
  •  0
  •   smerlin    14 年前

    我刚看了一下最新的标准草案 N3035 它还包括一个附加表(_§7.1.6.2),其中列出了所有有效的 简单类型说明符 并表明 unsigned int 类似的类型实际上是 简单类型说明符 .

    simple-type-specifier:
        ::opt nested-name-specifieropt type-name
        ::opt nested-name-specifier template simple-template-id
        char
        char16_t
        char32_t
        wchar_t
        bool
        short
        int
        long
        signed
        unsigned
        float
        double
        void
        auto
        decltype ( expression )
    type-name:
        class-name
        enum-name
        typedef-name