Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ความแตกต่างระหว่าง struct และ typedef struct ใน C++

พื้นฐานแล้ว struct ใช้เพื่อกำหนดโครงสร้าง (structure) ใน C หากต้องการใช้ ต้องเขียนคีย์เวิร์ด struct นำหน้าชื่อโครงสร้างทุกครั้ง หากใช้ typedef จะตั้งชื่อใหม่ได้ ใช้ชื่อนั้นโดยไม่ต้องเขียน struct

// C style
struct Point { int x, y; };
struct Point p1;        // ต้องเขียน struct
typedef struct Point Point_t;
Point_t p2;             // ไม่ต้องเขียน struct

ใน C++

ไม่มีความแตกต่าง ระหว่าง struct และ typedef struct เพราะใน C++ ทุก struct/union/enum/class declaration จะทำงานเหมือนมี typedef อยู่แล้ว (implicit typedef) ตราบใดที่ชื่อไม่ถูกบังโดย declaration อื่นที่มีชื่อเดียวกัน

// C++ style
struct Point { int x, y; };
Point p1;        // OK ใน C++ ไม่ต้องเขียน struct
Point p2;        // เหมือน typedef แล้ว

ข้อแตกต่างเล็กน้อย (Subtle Difference)

typedef ไม่สามารถ forward declare ได้ (ไม่สามารถ `typedef struct Foo Foo_t;` แล้วค่อย define `struct Foo` ภายหลังได้) ดังนั้นสำหรับ typedef option ต้อง include ไฟล์ที่มี typedef ก่อนใช้งานทุกครั้ง

แนวทางปฏิบัติใน C++ ทันสมัย: ใช้ struct Name { ... }; โดยตรง ไม่ต้อง typedef ชื่อใหม่ ชื่อโครงสร้างใช้ได้ทันที