Существует этот код:Доступ к личным данным членов внешнего класса во внутреннем классе
#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;
}
Почему Внутренний класс имеет доступ к частной информации членов «а» класс Outer? Следуя этой статье XL C/C++ V8.0 for Linux, она не должна компилироваться, однако она компилируется на g ++ 4.4.0.
Нет, в этой статье также говорится, что внутренний класс не имеет доступа к охватывающему классу. Но вы правы, что это совершенно верно. – hvd
@hvd: Я думаю, ты прав, отредактирован. Мне пришлось перечитать его несколько раз, потому что это кажется немного запутанным. –
На самом деле, это совершенно справедливо, но (предположительно, когда IBM написала свою документацию и компилятор) изначально недействительно: он был действителен по адресу http://www.open-std.org/JTC1/SC22/WG21/docs /cwg_defects.html#45 – hvd