Poniższy przykładowy kod kompiluje dobrze w Visual C++:C++ prywatny modyfikator ignorowane na zagnieżdżonego anonimowej struktury
class Test {
private:
struct {
struct {
int privateData;
};
};
};
int main(int, char **)
{
Test test;
test.privateData = 0;
return 0;
}
ale dlaczego? Spodziewam się błędu kompilatora, ponieważ element privateData
powinien być niedostępny dla funkcji main, ponieważ powinien on być private
, podobnie jak kontener tego kontenera. Wiem, że bezimienne struktury nie są częścią oficjalnego C++, ale ten projekt jest asinine.
Nawiasem mówiąc Próbowałem również zmienić private
do protected
i struct
do union
: wygląda na to, że kompilator odmawia cześć modyfikatory dostępu na anonimowych kodowanym i związków, które są zagnieżdżone wewnątrz innego anonimowego struct lub Unii.
Czy ktoś może wyjaśnić tę funkcję?
To brzmi jak błąd, który został naprawiony w _VS2005sp1_, której wersji używasz? Należy pamiętać, że _anonimowe structs_ nie są standardową funkcją _C++ _ ... –
nie, używam VS 2012 –
@ K-ballo gcc również kompiluje to ... –