【发布时间】:2010-05-26 22:55:14
【问题描述】:
数组、函数、指针、引用、类、联合、枚举和指向成员的指针是复合类型。
我对复合类型的理解是基于其他类型。例如T[n]、T*和T&都是基于T。那么枚举是基于什么其他类型的呢?
或者,如果我对复合类型的理解不正确,那么究竟是什么类型使它成为复合类型? compound 仅仅是 user-defined 的同义词吗?
【问题讨论】:
-
在 C 中,使用术语“派生类型”而不是“复合类型”,并且在 C 中枚举不是派生类型。这让我觉得 C++ 中的“复合类型”不仅意味着将类型复合为新类型,还意味着将值复合为新类型。给定枚举的描述使人们更加怀疑“枚举,它包含一组命名的常量值”。
-
@Johannes C 中的枚举和 C++ 中的枚举是完全不同的野兽,不是吗?例如,您可以在 C 中为枚举变量分配整数值,但在 C++ 中则不能。
-
正确但在两种语言中它们都定义了自己的类型。但我想我对这两个术语解释得太多了。 “复合类型”实际上似乎只是指复合类型的作用,而像 AndreyT 所说的枚举的底层类型是复合类型,似乎:)
-
标准引入了诸如“复合类型”之类的术语而没有激励它们,这有点令人遗憾。也许有人有带注释的参考手册并且可以查一下?那会很好。
-
ARM 使用术语“派生类型”并且同样不包括枚举。似乎这个术语的动机是“派生”在 C++ 中具有不同的含义(从其他类派生的类)。不过我认为你有一个很好的观点。 C 与底层整数类型(甚至兼容)的接近性可能促使他们不制作枚举派生类型,并反过来促使 C++ 设计者制作复合类型。