有以下代码:

#include <iostream>

class Outer{
    int a; // private data member of class Outer
public:
    Outer(): a(55){}
    class Inner{
    public:
        void fun(Outer ob){
            std::cout << ob.a << std::endl;
        }
    };
};

int main() {

    Outer::Inner object;
    object.fun(Outer()); // prints 55
    //std::cout << (Outer().a) << std::endl; error: 'int Outer::a' is private

    return 0;
}

为什么内部类可以访问外部类的私有(private)成员数据“a”?在本文XL C/C++ V8.0 for Linux之后,它不应该编译,但是可以在g++ 4.4.0上编译。

最佳答案

根据该文档XL C/C++ V8.0不支持C++ 11,请参阅“符合语言标准”一节。



当前标准表示(ISO/IEC 14882:2011 11.7):



在以前的语言标准中,是否允许这种访问,或者至少不清楚是否应该允许这种访问,具体取决于您的解释。

关于c++ - 访问内部类中外部类的私有(private)成员数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8869907/

10-13 06:29