c++ - 为什么我可以访问类外的私有结构成员
问题描述
当我访问这个私有结构成员时,msvc 编译器告诉我无法访问该成员,但可以成功运行代码。
但是如果我将结构成员排除在外,则代码将无法运行
#include <iostream>
class A{
union{
struct{
char* c;
};
};
};
void fun(A* tmp) {
//like this,note me can't access,but have no error
tmp->c = new char('a');
}
int main(void) {
A t;
fun(&t);
std::cout << t.c;
return 0;
}
//can't run,me can't access and have a "can't access" error
class A{
....
private:
union{
};
struct{
char* c;
};
....
};
txt 输出
1>------ Build started: Project: c++11test, Configuration: Debug x64 -----
-
1> main.cpp
1>d:\wirbelwind\documents\visual studio
2015\projects\json\c++11test\main.cpp(52): warning C4091: 'static ': ignored
on left of 'a' when no variable is declared
1> c++11test.vcxproj -> D:\Wirbelwind\Documents\Visual Studio
2015\Projects\json\x64\Debug\c++11test.exe
1> c++11test.vcxproj -> D:\Wirbelwind\Documents\Visual Studio
2015\Projects\json\x64\Debug\c++11test.pdb (Full PDB)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
我编辑了代码,这段代码可以做测试。我使用vs2015(工具v140)
解决方案
推荐阅读
- firebird - 如何使用 Firebird 触发器从表中获取值
- javascript - 当我滑动输入范围滑块时,flexbox 中的表单元素不固定
- python - Python 十进制计算不精确
- php - Laravel 护照未经身份验证的消息
- conv-neural-network - 图像数据增强和训练
- javascript - 如何防止在 React Native 功能中单击按钮时刷新页面
- python - 如何替换表中的 NaN 以获取每日股票收益?
- python - 什么原因以及如何防止 BigQuery 错误:调用时超过 120.0s 的截止日期
- python - “UnboundLocalError:分配前引用的局部变量'args'”以及如何解决?
- java - Quarkus 1.13.7 + OptaPlanner 8.7.0 error - Illegal char in quarkus-core-deployment-1.13.7.Final.jar