2013-06-15 27 views
5

Ai có thể đề cập đến sự khác biệt giữa một liên minh vô danh và một công đoàn ẩn danh (hay cấu trúc)? Tôi vừa tìm thấy một:
các chức năng không thể được xác định trong công đoàn ẩn danh.Công đoàn ẩn danh và một công đoàn bình thường

+3

[cấu trúc chưa đặt tên/liên kết trong C] (http://stackoverflow.com/questions/13376494/unnamed-struct-union-in-c), [Cấu trúc ẩn danh/liên kết trong C] (http: // gcc.gnu.org/ml/gcc-patches/1999-06n/msg00376.html) –

Trả lời

7

Bạn không yêu cầu toán tử chấm "." để truy cập các phần tử công đoàn ẩn danh.

#include <iostream> 
using namespace std; 
int main() { 
    union { 
     int d; 
     char *f; 
    }; 

    d = 4; 
    cout << d << endl; 

    f = "inside of union"; 
    cout << f << endl; 
} 

Điều này sẽ biên dịch thành công trong trường hợp này là "KHÔNG" cho Liên minh thông thường.

Ngoài ra, liên kết ẩn danh chỉ có thể có các thành viên công khai.

PS: Chỉ cần bỏ qua phần tên lớp của cú pháp không làm một liên minh một liên minh ẩn danh. Đối với một công đoàn để hội đủ điều kiện như là một hiệp hội vô danh , tuyên bố không được khai báo một đối tượng.

+2

Câu trả lời hay, +1! Tôi không có khái niệm vô danh tồn tại :) Chỉ trong trường hợp bất kỳ ai muốn đọc thêm (tôi đã từng đọc câu trả lời ở trên!) Xem phần 9.4, bullet point 5 & 6 cho một số tinh tế khác của C++ spec trong INCITS/ISO/IEC 14882-2011 [2012]. – Jimbo

0

Theo như tôi biết, cấu trúc ẩn danh không tồn tại trong C++ chuẩn, mặc dù chúng có thể được hỗ trợ bởi một số trình biên dịch.

Công đoàn ẩn danh không được có thành viên được bảo vệ hoặc riêng tư. Các thành viên được truy cập mà không sử dụng tên của công đoàn (rõ ràng, vì nó không có!). Công đoàn ẩn danh toàn cầu (Thiên Chúa cấm) phải được tuyên bố tĩnh.

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