2013-06-15 15 views
5

Czy ktokolwiek może wskazać różnice między normalnym i anonimowym związkiem (lub strukturą)? Właśnie znalazłem jeden:
funkcji nie można zdefiniować w anonimowym związku.Związek anonimowy i normalny związek

+3

[bez nazwy struktura/związek w C] (http://stackoverflow.com/questions/13376494/unnamed-struct-union-in-c), [Anonimowy struct/union w C] (http: // gcc.gnu.org/ml/gcc-patches/1999-06n/msg00376.html) –

Odpowiedz

7

Nie potrzebujesz operatora kropki "." uzyskać dostęp do anonimowych elementów unii.

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

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

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

Pomoże to skompilować w tym przypadku ale "NIE" dla normalnej Unii.

Ponadto związek anonimowy może mieć tylko członków publicznych.

PS: Po prostu pomijanie części składni nazwy klasy nie czyni z niej związku anonimowego. Aby związek mógł się zakwalifikować jako związek anonimowy, deklaracja nie może zadeklarować obiektu.

+2

Dobra odpowiedź, +1! Nie miałem pojęcia, że ​​istnieją anonimowe związki zawodowe :) Na wypadek, gdyby ktoś chciał dalej czytać (raz przeczytałem powyższą odpowiedź!) Spójrz na punkt 9.4, punktory 5 i 6 dla niektórych innych subtelności specyfikacji C++ w INCITS/ISO/IEC 14882-2011 [2012]. – Jimbo

0

O ile mi wiadomo, anonimowe konstrukcje nie istnieją w standardowym C++, chociaż mogą być obsługiwane przez niektóre kompilatory.

Anonimowe związki nie mogą mieć chronionych lub prywatnych członków. Członkowie są dostępni bez użycia nazwy związku (oczywiście, ponieważ nie ma takiego!). Globalne związki anonimowe (nie daj Boże) muszą zostać uznane za statyczne.