C++类型:内置类型,复合类型和类类型


如标题所言,C++类型基本分为三类:内置类型,复合类型和类类型。

  • 内置类型:编译器内置的基本类型,如int, char, float, double, bool等;
  • 复合类型:根据其它类型定义的类型,主要有这么几类:数组,字符串,指针,引用,结构体(struct),联合体(union);
  • 类类型:用struct和class定义的类。

这里需要注意这么两点:

  1. 复合类型的字符串指的是C-style字符串,本质就是char数组。STL的string类是类类型。
  2. 复合类型的结构体指的也是c-style的结构体,和类型类一样,也是用struct和class定义;和类类型的区别是,没有构造函数(包括默认构造函数)和析构函数。

比如下例:

1
2
3
4
5
6
7
8
9
10
struct A {
int a;
};
struct B {
int b;
B() {}
};
struct C {
string c;
};

其中只有A是复合类型结构体,B和C都是类类型;B因为有显式定义默认构造函数;C因为有类成员,编译器会合成默认构造函数。

区别struct和class是复合类型结构体还是类类型是有意义的。

  1. C++中复合类型结构体变量可以直接用初始化列表赋值,而类对象不行:

    1
    2
    3
    4
    5
    6
    struct A {
    char c;
    int i;
    double d;
    };
    A a={'p',7,3.1415926}; //定义时直接赋值

    上例如果给struct A加上构造函数,则编译错误。

  2. 对于union类型,其成员就只能包含复合类型结构体,而不能有类类型。详情见:C++ union介绍