2010-05-26 35 views
12

Mảng, hàm, con trỏ, tham chiếu, lớp, công đoàn, liệt kê và con trỏ đến các thành viên là loại hợp chất.Tại sao enums được coi là loại hợp chất?

Sự hiểu biết của tôi về loại kết hợp được dựa trên các loại khác. Ví dụ: T[n], T*T& đều dựa trên T. Sau đó, các loại khác (s) là một điều tra dựa trên?

Hoặc nếu sự hiểu biết của tôi về các loại hợp chất là không chính xác, chính xác thì nó là loại gì khiến nó trở thành một loại hợp chất? Hợp đồng chỉ là một từ đồng nghĩa với do người dùng xác định?

+0

Trong C, cụm từ "loại có nguồn gốc" thay vì "loại hợp chất" được sử dụng thay thế và trong các loại enums C không phải là loại có nguồn gốc. Điều này làm cho tôi nghĩ rằng "loại hợp chất" trong C++ không chỉ có nghĩa là ghép các loại sang một kiểu mới, mà còn là các giá trị cho một kiểu mới. Mô tả các liệt kê được đưa ra làm tăng sự nghi ngờ mà nói "liệt kê, bao gồm một tập hợp các giá trị hằng số được đặt tên." –

+0

@Johannes enums trong C và enums trong C + + là con thú khá khác nhau, phải không? Ví dụ, bạn có thể gán các giá trị tích phân cho các biến enum trong C nhưng không phải trong C++. – fredoverflow

+0

đúng nhưng không nontheless trong cả hai ngôn ngữ mà chúng xác định loại riêng. Nhưng tôi đoán tôi đang diễn giải quá nhiều vào hai thuật ngữ này. "loại hợp chất" trên thực tế dường như chỉ đề cập đến hành động của các loại kết hợp, và loại cơ bản như AndreyT nói cho enums là loại phức tạp, có vẻ như :) –

Trả lời

12

Trong loại C++ enum là vô hướng loại, nhưng đồng thời chúng là các loại hợp chất vì chúng được xây dựng trên một số loại tích phân cơ bản. Trong trường hợp của một mảng hoặc con trỏ, bạn chỉ định rõ ràng loại "cơ sở", nhưng trong trường hợp một enum thì kiểu tích phân cơ bản cụ thể được chọn một cách ngầm định và tự động bởi việc thực hiện. Bạn không có quyền kiểm soát bằng tay đối với loại tích phân cơ bản, mà vẫn không loại bỏ các loại enum khỏi sự phức tạp trong tự nhiên.

Một số trình biên dịch (cũng như tương lai C++ chuẩn C++ 0x) cho phép người dùng chỉ định kiểu số nguyên cơ bản cho kiểu enum đã cho, rõ ràng hơn thực tế đó là một loại hợp chất. Xem here để biết các ví dụ như

enum class Color : char { red, blue }; 
Các vấn đề liên quan