小编Kun*_*ime的帖子

防止返回私有内部类实例

我一直在玩内部课程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;
}
Run Code Online (Sandbox Code Playgroud)

这是编译在Linux clang++-3.5-std=c++14.

  • (1)中我得到了预期的编译器错误,因为它inner是一个私有的内部类outer.

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

  • 一切都适用于(3).

我的问题:

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

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

c++

23
推荐指数
1
解决办法
1665
查看次数

标签 统计

c++ ×1