2013-02-11 26 views
19

Theo như tôi hiểu thì các loại cơ bản là Scalar và Mảng tổng hợp nhưng những gì về loại người dùng xác định? Theo tiêu chí nào tôi sẽ chia chúng thành hai loại?Đối tượng vô hướng trong C++ là gì?

struct S { int i; int j }; 
class C { public: S s1_; S s2_ }; 
std::vector<int> V; 
std::vector<int> *pV = &v; 
+0

Tôi nghĩ bạn có thể muốn dọn dẹp chính tả và cú pháp của đoạn giới thiệu của bạn, và có thể expanind vào nó một chút nếu bạn muốn câu trả lời hữu ích – tletnes

+0

Bạn có nghĩa là "loại" và "tổng hợp"? – us2012

+2

@ us2012: "Băng và Arrogates" phải là một ban nhạc đại học độc lập. –

Trả lời

29

phiên bản ngắn: loại trong C++ bao gồm: các loại

  • Đối tượng: vô hướng, mảng, các lớp học, các công đoàn

  • loại Reference

  • loại Function

  • (loại viên) [xem dưới đây]

  • void


Long phiên bản

  • loại Object

    • vô hướng

      1. số học (không thể thiếu, float)

      2. con trỏ: T * cho bất kỳ loại T

      3. enum

      4. con trỏ-to-thành viên

      5. nullptr_t

    • Mảng: T[] hoặc T[N] cho bất kỳ loại hoàn toàn, không tham khảo T

    • Lớp học: class Foo hoặc struct Bar

      1. lớp Trivial

      2. Uẩn

      3. Lớp POD

      4. (v.v. v.v.)

    • đoàn: union Zip

  • Tài liệu tham khảo loại: T &, T && cho bất kỳ đối tượng hoặc miễn phí chức năng loại T

  • loại Function

    • chức năng miễn phí: chức năng R foo(Arg1, Arg2, ...)

    • Thành viên: R T::foo(Arg1, Arg2, ...)

  • void

loại thành viên làm việc như thế này. Loại thành viên có dạng T::U, nhưng bạn không thể có đối tượng hoặc biến loại thành viên. Bạn chỉ có thể có thành viên con trỏ. Một con trỏ thành viên có loại T::* U, và nó là một đối tượng con trỏ đến thành viên nếu U là một loại đối tượng (miễn phí) và một hàm con trỏ thành thành viên nếu U là một loại hàm (miễn phí).

Tất cả các loại được hoàn thành trừ void, mảng chưa được xếp hạng và các lớp và công đoàn đã được khai báo nhưng không được xác định. Tất cả các loại không đầy đủ ngoại trừ void có thể được hoàn thành.

Tất cả các loại có thể là const/volatile đủ điều kiện.

Tiêu đề <type_traits> cung cấp các lớp đặc điểm để kiểm tra từng đặc điểm loại này.

22

Tôi nghĩ rằng đây sẽ là một câu trả lời toàn diện hơn:

enter image description here

tài liệu gốc:
http://howardhinnant.github.io/TypeHiearchy.pdf

một vô hướng là một nền tảng ngoại trừ nó không thể bị vô hiệu, nhưng nó có thể là một loại con trỏ hoặc loại enum.

cơ bản có từ khóa bằng ngôn ngữ. nó dễ dàng nhận ra khi được nói như thế.

3

Có một loạt các lớp thư viện được sử dụng để kiểm tra loại biến. std::is_scalar có thể được sử dụng để kiểm tra nếu một đối tượng là một vô hướng.

Một loại vô hướng là một loại đã tích hợp chức năng cho các nhà điều hành bổ sung mà không quá tải (số học, con trỏ, con trỏ thành viên, enum và std::nullptr_t).

Đồng thời bảng từ here.

C++ Type Categories

Các vấn đề liên quan