gpt4 book ai didi

c++ - 防止返回私有(private)内部类实例

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:40:31 25 4
gpt4 key购买 nike

<分区>

我一直在研究 C++ 中的内部类,但现在有点困惑。

我的代码:

#include <iostream>

class outer{
private:
class inner{
private:
int something;
public:
void print(){
std::cout<< "i am inner"<<std::endl;
}
};
public:
inner returnInner(){
inner i;
return i;
}
};

int main(){
outer o;
//outer::inner i = o.returnInner(); (1)
//auto i = o.returnInner(); (2)
//i.print();
o.returnInner().print(); //(3)
return 0;
}

这是在 Linux 上使用 clang++-3.5-std=c++14 编译的。

  • (1) 中,我收到了预期的编译器错误,因为 innerouter 的私有(private)内部类。

  • 但是,在(2)中使用auto关键字时,编译成功,程序运行。

  • (3) 也一切正常。

我的问题:

为什么会这样?我可以防止从外部方法返回私有(private)内部类的实例,同时保留在外部类中移动和/或复制它们的能力吗?

编译器不应该像在 (1) 中那样在 (2)(3) 中引发错误吗?

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