什么是化合物类型?

时间:2018-09-10 02:55:59

标签: c++ types

我的问题是关于复合类型的。我似乎找不到任何地方可以解释C ++中的复合类型。

它们与复合类型不同吗?

4 个答案:

答案 0 :(得分:3)

摘自C ++工作草案(N4713):

  

6.7类型[基本类型]

     
      
  1. 类型有两种:基本类型和复合类型。
  2.   

在上述草案中没有化合物类型的具体定义。我们所知道的只是这些化合物类型的构建方式。

  

6.7.2化合物类型[basic.compound]

     
      
  1. 可以通过以下方式构造复合类型:
      (1.1)—给定类型的对象的数组;
      (1.2)—具有给定类型的参数并返回void或给定类型的引用或对象的函数;
      (1.3)—指向给定类型的cv void或对象或函数(包括类的静态成员)的指针;
      (1.4)—对给定类型的对象或函数的引用。有两种类型的引用:
      (1.4.1)—左值引用
      (1.4.2)—右值参考
      (1.5)-包含一系列各种类型的对象的序列,一组用于操纵这些对象的类型,枚举和函数以及对这些实体的访问的一组限制;
      (1.6)—联合,它们是能够在不同时间包含不同类型的对象的类;
      (1.7)—枚举,包括一组命名的常量值。每个不同的枚举构成一个不同的枚举类型;
      (1.8)—指向非静态类成员的指针,该成员标识给定类对象内给定类型的成员。数据成员的指针和成员函数的指针统称为成员类型指针。
  2.   

在同一草案中,复合类型是指模板形式的主要类型的组合。

  

23.15.4.2复合类型特征[meta.unary.comp]

     
      
  1. 这些模板提供了主要类型类别的便捷组成,对应于第6.7节中的描述。
  2.   

答案 1 :(得分:2)

摘自《 C ++ Primer,第5版》 :

  

复合类型是根据另一种类型定义的类型。 C ++有几种复合类型,其中的两种,引用和指针...

我认为这意味着复合类型是引用和指针之类的类型。如果我错了,请纠正我。

答案 2 :(得分:0)

不是fundamental type(核心语言中的一种类型)的任何类型都是复合类型。

基本类型:void,nullptr_t,bool,整数/字符/浮点类型,范围(C ++ 20)
复合类型:所有其他类型

另一种考虑方式是,如果在编写声明时必须使用其他类型,则该对象是复合类型:

std::vector<T> myVec; // type T used in type std::vector<T> => compound
int* myPtr; // type int used in type int* => compound
double myVal = 10.3; // double is a fundamental type => fundamental
double& myRef = myVal; // type double is used in type double& => compound

答案 3 :(得分:0)

有两种类型:

基本类型:像 int,double,boolean ,... 另外这个类型可以通过 const
限定 const int c1=89;

复合类型:使用基类型构建的类型。
1- 指针 int *v1=&v1;
2 引用 int &r1=v1;
基于 int 或 char 我们的任何东西的 3 数组
4 弦
这就是我的理解,如果有人可以添加或更正我会很高兴。