【Cpp 基础】什么是内置类型,复合类型和类类型?有何区别?

0. 基本了解

如标题所言,C++类型基本分为三类:内置类型,复合类型和类类型。
  • 内置类型(我觉得叫”基本类型“可能更容易理解一点):编译器内置的基本类型,如int, char, float, double, bool等;
  • 复合类型:根据其它类型定义的类型,主要有这么几类:数组,字符串,指针,引用,结构体(struct),联合体(union);
  • 类类型:用struct和class定义的类。

1. 复合类型与类类型区分

这里需要注意复合类型和类类型的区分:
  1. 复合类型的字符串指的是C-style字符串,本质就是char数组。
  2. STL的string类是类类型。
  3. 复合类型的结构体指的也是C-style的结构体,和类型类一样,也是用struct和class定义;和类类型的区别是,没有构造函数(包括默认构造函数)和析构函数。
  4. 类类型的结构体有构造函数、析构函数。
比如下例:
struct A {
    int a;//没有构造函数
};


struct B {
    int b;
    B() {}//有构造函数
};

struct C {
    string c; //有类成员,编译器会自动合成默认构造函数
};
其中只有A是复合类型结构体B和C都是类类型;B因为有显式定义默认构造函数;C因为有类成员,编译器会合成默认构造函数。
 
区别struct和class是复合类型结构体还是类类型是有意义的:C++中复合类型结构体变量可以直接用初始化列表赋值,而类对象不行:
struct A {
    char c;
    int i;
    double d;
};


A a={'p',7,3.1415926}; //定义时直接赋值
上例如果给struct A加上构造函数,那么A就变成了一个类类型,类类型不能使用初始化列表,则编译错误。
 
对于union类型,其成员就只能包含复合类型结构体,而不能有类类型。
 
-------------------------
该内容采用 CC BY-NC-SA 4.0 许可协议,著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
作者:云海鹰影
来源:C++类型:内置类型,复合类型和类类型 | 云海鹰影
链接:https://www.chaoswork.cn/20190512-12.html

 

posted @ 2024-01-04 21:54  FBshark  阅读(60)  评论(0编辑  收藏  举报