Một số trình biên dịch C++ cho phép các công đoàn và cấu trúc ẩn danh như một phần mở rộng cho tiêu chuẩn C++. Đó là một chút đường cú pháp đôi khi rất hữu ích.Tại sao C++ không cho phép cấu trúc ẩn danh?
Lý do ngăn cản điều này là một phần của tiêu chuẩn là gì? Có một rào cản kỹ thuật không? Một triết lý? Hay không đủ để cần biện minh cho nó?
Dưới đây là một ví dụ về những gì tôi đang nói về:
struct vector3 {
union {
struct {
float x;
float y;
float z;
};
float v[3];
};
};
trình biên dịch của tôi sẽ chấp nhận điều này, nhưng nó cảnh báo rằng "nameless struct/union" is a non-standard extension to C++.
Rõ ràng có một số nhầm lẫn về ý của bạn. Bạn có thể vui lòng cung cấp một ví dụ về mã chỉ biên dịch do mở rộng trình biên dịch không? –
Lưu ý rằng có hai khái niệm, có vẻ giống nhau, nhưng rất khác nhau: * cấu trúc chưa đặt tên * và * cấu trúc ẩn danh *. Đầu tiên là cái này, mà C++ hỗ trợ: 'struct {int i; } a; a.i = 0; '(loại không có tên). Thứ hai là cái này, mà C++ không * không * hỗ trợ: 'struct {int i; }; i = 0; '(loại không có tên, và nó thoát ra ngoài phạm vi xung quanh). C++, tuy nhiên, * có * hỗ trợ cả hai unionsed và nặc danh * unions *. –
Điều này trông giống như thư viện vector VMMLib khá thú vị. Tôi tin rằng vấn đề là công đoàn có cấu trúc chưa đặt tên, nhưng tôi không chắc chắn. – greyfade