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

时间:2013-01-06 22:50:17

标签: 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;
}

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

顺便说一句,我还尝试将private更改为protected并将struct更改为union:看起来编译器拒绝遵守匿名结构上的访问修饰符和嵌套在另一个匿名结构或联合中的联合。

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

1 个答案:

答案 0 :(得分:6)

是的,这是一个错误。微软承认反馈报告为is here

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

  

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