gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:20:38 27 4
gpt4 key购买 nike

以下示例代码在 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:它看起来编译器拒绝尊重嵌套在另一个匿名结构或 union 中的匿名结构和 union 上的访问修饰符。

谁能解释一下这个功能?

最佳答案

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

目前,该错误处于“无法修复”状态,尚不清楚何时(如果有的话)会得到解决。有一个有点奇怪的解决方法,由 Edison Design Group 编写的 Visual Studio 中内置的 IntelliSense 解析器确实提示它。您会看到红色曲线和消息:

Error: member "Test.privateData" (declared at line 10) is inaccessible

关于在嵌套匿名结构上忽略 C++ 私有(private)修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14187647/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com