C++ 为什么枚举被认为是复合类型?

C++ 为什么枚举被认为是复合类型?,c++,enums,types,C++,Enums,Types,数组、函数、指针、引用、类、联合、枚举和指向成员的指针都是复合类型 我对复合类型的理解是基于其他类型。例如,T[n]、T*和T&都基于T。那么,枚举所基于的其他类型是什么 或者,如果我对复合类型的理解不正确,那么一个类型究竟是什么使它成为复合类型的呢?C++中简单的同义词是用户定义的?< p>是标量类型,但同时它们是复合类型,因为它们是建立在一些基本整型的基础上的。对于数组或指针,您可以显式指定“base”类型,但对于枚举,具体的基础整数类型由实现隐式自动选择。您无法手动控制基础整数类型,这仍然

数组、函数、指针、引用、类、联合、枚举和指向成员的指针都是复合类型

我对复合类型的理解是基于其他类型。例如,
T[n]
T*
T&
都基于
T
。那么,枚举所基于的其他类型是什么

或者,如果我对复合类型的理解不正确,那么一个类型究竟是什么使它成为复合类型的呢?C++中简单的同义词是用户定义的?

< p>是标量类型,但同时它们是复合类型,因为它们是建立在一些基本整型的基础上的。对于数组或指针,您可以显式指定“base”类型,但对于枚举,具体的基础整数类型由实现隐式自动选择。您无法手动控制基础整数类型,这仍然不会取消枚举类型在本质上是复合类型的资格

<>一些编译器(以及未来C++标准C++ 0x)允许用户指定给定的枚举类型的基础整数类型,这使得它实际上更为明显的是复合类型。请参见以下示例:

enum class Color : char { red, blue };

在C中,使用术语“派生类型”而不是“复合类型”,在C中,枚举不是派生类型。这使我认为C++中的“复合类型”不仅意味着将类型组合为新类型,而且还将值赋给新类型。对给定的“枚举”的描述,这些怀疑表示“枚举,包括一组命名常量值”,“C中的Johannes enums和C++中的枚举”是不同的动物,不是吗?例如,可以在C中为EnUM变量赋值,而不是C++。但我想我对这两个术语解释得太多了。“复合类型”实际上似乎只是指复合类型的作用,而AndreyT所说的Enum的底层类型是复合类型,似乎:)标准引入了“复合类型”这样的术语却没有激发它们,这有点悲哀。也许有人有带注释的参考手册,可以查一下?那太好了。ARM使用术语“派生类型”,不包括类似的枚举。似乎这个术语是由“派生”在C++中派生出不同含义(来自其他类的类)所推动的。不过,我认为你有一个很好的观点。C与底层整数类型的紧密性(甚至它是兼容的)可能促使他们不做枚举派生类型,相反地促使C++设计者将它们变成复合类型。