以下示例代码在 Visual C++ 中编译得很好:
class Test {
private:
struct {
struct {
int privateData;
};
};
};
int main(int, char **)
{
Test test;
test.privateData = 0;
return 0;
}
但为什么?我预计会出现编译器错误,因为privateData
成员应该无法被函数 main 访问,因为它应该是private
就像它的容器的容器一样。
我知道无名结构不是官方 C++ 的一部分,但这种设计很愚蠢。
顺便说一句我也尝试过改变private
into protected
and struct
into union
:看起来编译器拒绝接受嵌套在另一个匿名结构或联合内的匿名结构和联合的访问修饰符。
有人可以解释一下这个功能吗?
是的,这是一个错误。微软承认是的,反馈报告is here https://connect.microsoft.com/VisualStudio/feedback/details/520784/access-to-private-fields-inside-anonymous-unions-and-structs-is-strangely-relaxed.
目前,该错误处于“不会修复”状态,尚不清楚何时(如果有)会得到解决。有一个有点奇怪的解决方法,由 Edison Design Group 编写的 Visual Studio 中内置的 IntelliSense 解析器确实对此有所抱怨。您会看到红色波浪线和消息:
错误:成员“Test.privateData”(在第 10 行声明)无法访问
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)