【发布时间】:2023-03-19 19:40:02
【问题描述】:
我有以下代码:
class outer
{
struct inner
{
int var1;
int var2;
inner() { var1 = 1; var2 = 2; }
};
inner inner_instance;
public:
const inner *get_inner() { return &inner_instance; }
};
int main(int argc, char *argv[])
{
// 1
outer outer_instance;
cout << outer_instance.get_inner()->var1 << endl;
// 2
// this cannot be compiled because outer::inner is private
//const outer::inner *inner_ref = outer_instance.get_inner();
//cout << inner_ref->var1;
// 3
const int *inner_var2 = (int *) outer_instance.get_inner();
inner_var2++;
cout << *inner_var2 << endl;
return 0;
}
我明白为什么 No.2 不能编译了。我只是不知道编译器的设计思想是什么,它允许访问私有嵌套类的公共字段,但不允许访问嵌套类本身,如 No.1。实例数据仍在内存中。如果我知道这种私有嵌套类的结构,我仍然可以像 No.3 那样实现赋值。
这是否意味着最好不要在公共函数中返回私有嵌套类的指针或引用?如果我真的必须将有关嵌套类的某些内容返回给外部世界,是否将其公开?
谢谢!
【问题讨论】:
-
不,如果您想隐藏任何内容,请将它们设为私有而不是公开。