2011-03-19 5 views
7

Tại sao cấu trúc rỗng trong C là một vi phạm ràng buộc? Tại sao quy tắc này được thay đổi trong C++?Cấu trúc rỗng trong C và cấu trúc rỗng trong C++

Có lý do lịch sử nào không?

+0

http://stackoverflow.com/questions/755305/empty-structure-in-c –

+0

có thể trùng lặp với [Kích thước của cấu trúc rỗng trong C?] (Http://stackoverflow.com/questions/ là gì? 1626446/what-is-the-size-of-an-empty-struct-in-c) – Nawaz

+2

@Nawaz: Đây là một câu hỏi khác. Câu hỏi thực tế là "tại sao" không "cái gì". –

Trả lời

8

vì bạn không có thừa kế trong C, bạn không cần chúng. Nếu bạn chỉ muốn có một kiểu con trỏ có thể phân biệt, bạn có thể sử dụng con trỏ đến các kiểu không đầy đủ.

struct opaque; 

struct opaque* stranger = 0; 

sẽ hoạt động tốt.

+0

+1 từ tôi: Bạn đã thắng cuộc tranh cãi của tôi với @Nawaz :) –

+0

+1 để nhắc tôi về điều này! – Nawaz

+0

Tôi cho rằng bạn là một chuyên gia vĩ mô.Bạn có thể xem http://stackoverflow.com/questions/5355241/generating-function-declaration-using-a-macro-iteration cho dù có bất kỳ cải tiến nào có thể không? Cảm ơn! –

3

tôi đoán là thế này:

Trong C, không có thừa kế, mẫu, và chức năng quá tải - ba lý do chính chúng ta sử dụng cấu trúc rỗng trong C++ - là một giao diện cơ bản, như một tham số mẫu, như một loại để giúp phân giải quá tải.

Bạn có thể nghĩ đến việc sử dụng bất kỳ cấu trúc rỗng trong C?

+0

Các cấu trúc rỗng có thể được sử dụng, không? [Xử lý so sánh: các lớp trống so với các lớp không xác định so với void *] (http://stackoverflow.com/questions/4525847/handles-comparison-empty-classes-vs-undefined-classes-vs-void) – Nawaz

+0

@Nawaz: Có lẽ, có lẽ, tôi đặc biệt đề cập đến điều này chỉ là một đoán :) –

+0

@Armen: Điều đó có nghĩa, đoán của bạn có vẻ là sai. Các cấu trúc rỗng trong C có thể được sử dụng nhiều lần, đặc biệt là khi 'void *' được sử dụng! – Nawaz