嵌套匿名结构上忽略C++私有修饰符

GOT*_*O 0 12 c++ nested private access-modifiers anonymous-struct

下面的示例代码在Visual C++中编译得很好:

class Test {
private:
    struct {
        struct {
            int privateData;
        };
    };
};

int main(int, char **)
{
    Test test;
    test.privateData = 0;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但为什么?我期望编译器错误,因为privateData函数main应该无法访问该成员,因为它应该private像它的容器容器一样.我知道无名结构不是官方C++的一部分,但这个设计是asinine.

顺便说一句,我也试图改变privateprotectedstructunion:它看起来像编译器拒绝兑付匿名结构和联合嵌套在另一个匿名结构或联合内部的访问修饰符.

有人可以解释这个功能吗?

Han*_*ant 6

是的,这是一个错误.微软承认,反馈报告就在这里.

现在,该错误处于"无法修复"状态,并且不清楚何时(如果有的话)它将被解决.有一种奇怪的解决方法,由爱迪生设计集团编写的Visual Studio内置的IntelliSense解析器确实抱怨它.你得到红色的波浪形和消息:

错误:成员"Test.privateData"(在第10行声明)无法访问

  • 您是否建议有大批开发人员及时流离失所,他们是否在访问说明人没有正确层叠两个级别的匿名结构? (2认同)