【发布时间】:2012-12-20 16:36:48
【问题描述】:
以下示例代码在 Visual C++ 中编译得很好:
class Test {
private:
struct {
struct {
int privateData;
};
};
};
int main(int, char **)
{
Test test;
test.privateData = 0;
return 0;
}
但是为什么呢?我预计会出现编译器错误,因为函数 main 应该无法访问 privateData 成员,因为它应该是 private 就像它的容器的容器一样。
我知道无名结构不是官方 C++ 的一部分,但这种设计是愚蠢的。
顺便说一句,我还尝试将 private 更改为 protected 和 struct 更改为 union:看起来编译器拒绝尊重嵌套在另一个匿名结构和联合中的访问修饰符结构或联合。
谁能解释一下这个功能?
【问题讨论】:
-
这听起来像是VS2005sp1中修复的bug,你用的是哪个版本?请记住,匿名结构不是标准的C++特性...
-
@K-ballo gcc 也编译这个...
-
顺便说一句,智能感知确实会抱怨,但它仍然可以编译
-
Clang 4.0 编译时出现错误“错误:'privateData' is a private member of 'Test'”
-
如果您将
private:放在第一个匿名结构中,然后在其下嵌套许多匿名结构,则它可以正常工作。答案似乎是:“这是一个错误。”
标签: c++ nested private access-modifiers anonymous-struct