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?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage