Der private C ++ - Modifikator wird in verschachtelten anonymen Strukturen ignoriert
Der folgende Beispielcode wird in Visual C ++ problemlos kompiliert:
class Test {
private:
struct {
struct {
int privateData;
};
};
};
int main(int, char **)
{
Test test;
test.privateData = 0;
return 0;
}
Aber warum? Ich würde einen Compilerfehler erwarten, weil derprivateData
member sollte für die Funktion main nicht erreichbar sein, da dies der Fall sein sollprivate
wie der Container seines Containers. Ich weiß, dass namenlose Strukturen nicht Teil von offiziellem C ++ sind, aber dieses Design ist asinin.
Übrigens habe ich auch versucht mich zu ändernprivate
inprotected
undstruct
inunion
: Der Compiler weigert sich anscheinend, Zugriffsmodifikatoren für anonyme Strukturen und Gewerkschaften zu berücksichtigen, die in einer anderen anonymen Struktur oder Union verschachtelt sind.
Kann jemand diese Funktion erklären?