36

据我了解,基本类型是标量,数组是聚合的,但是用户定义的类型呢?我会根据什么标准将它们分为两类?

struct S { int i; int j };
class C { public: S s1_; S s2_ };
std::vector<int> V;
std::vector<int> *pV = &v;
4

3 回答 3

49

简短版本: C++ 中的类型是:

  • 对象类型:标量、数组、类、联合

  • 引用类型

  • 函数类型

  • (会员类型)[见下文]

  • void


长版

  • 对象类型

    • 标量

      1. 算术(整数,浮点数)

      2. 指针:T *适用于任何类型T

      3. 枚举

      4. 指向成员的指针

      5. nullptr_t

    • 数组:T[]T[N]任何完整的非引用类型T

    • 类:class Foostruct Bar

      1. 琐碎的课程

      2. 骨料

      3. POD 课程

      4. (等等等等)

    • 工会:union Zip

  • 引用类型:T &T &&对于任何对象或自由函数类型T

  • 函数类型

    • 免费功能:R foo(Arg1, Arg2, ...)

    • 成员函数:R T::foo(Arg1, Arg2, ...)

  • void

成员类型是这样工作的。成员类型的形式为T::U,但您不能拥有成员类型的对象或变量。你只能有成员指针。成员指针具有 type ,如果是(自由)对象类型,T::* U则它是指向成员对象的指针,如果是(自由)函数类型,则它是指向成员函数的指针。UU

void除了未定义大小的数组和声明但未定义的类和联合之外,所有类型都是完整的。除了void可以完成的所有不完整类型。

所有类型都可以const/volatile合格。

<type_traits>头提供了 trait 类来检查这些类型特征中的每一个。

于 2013-02-11T22:24:16.883 回答
36

我认为这将是一个更全面的答案:

在此处输入图像描述

原始文档:
http ://howardhinnant.github.io/TypeHiearchy.pdf

标量是基本的,但它不能为 void,但它可以是指针类型或枚举类型。

并且一个基本的语言中有一个关键字。这么说很容易辨认。

于 2015-01-13T02:18:47.493 回答
7

有一系列用于测试变量类型的库类。 std::is_scalar可用于测试对象是否为标量。

量类型是一种具有加法运算符的内置功能而没有重载(算术、指针、成员指针、枚举和std::nullptr_t)的类型。

还有一张来自这里的桌子。

C++ 类型类别

于 2015-12-25T14:22:57.203 回答