Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Khác biệt struct và typedef struct trong C++

Trong C, struct Tag { ... }; tạo kiểu có tên struct Tag. Để dùng tên ngắn Tag, cần typedef struct Tag { ... } Tag;.

Trong C++, không có khác biệt. Khai báo struct Tag { ... }; tự động đưa tên Tag vào namespace (giống như typedef ngầm). Cả hai cách sau đều hợp lệ và tương đương:

// Cách 1: struct thuần
struct Point { int x, y; };
Point p1; // OK

// Cách 2: typedef struct (phong cách C)
typedef struct { int x, y; } Point2;
Point2 p2; // OK

Điểm khác biệt tinh tế

  • typedef không thể forward declare (khai báo trước). Phải include header chứa định nghĩa typedef trước khi dùng.
  • struct Tag có thể forward declare: struct Tag; rồi dùng Tag*, Tag&.

Khuyến nghị C++ hiện đại

Dùng struct Ten { ... }; đơn giản. Tránh typedef struct phong cách C trừ khi viết code tương thích C/C++ chung.