Per favore aiutami a capire perché è possibile che una funzione membro della classe restituisca un oggetto classe nidificato privato e perché sia quindi possibile chiamare le funzioni membro su quella classe nidificata privata, ad es. :Accesso alla classe nidificata privata restituita dalla funzione membro
class Y
{
class X
{
public:
void f() { cout << "Hello World" << endl; }
};
public:
X g() { return X(); }
};
void h()
{
Y::X x; // Error, as expected: class Y::X is private.
x.f(); // Error.
Y y; // OK.
y.g().f(); // OK. But why???
}
ho provato con GCC e Visual C++, e che lo scorso riga di compilazione su entrambi. Non riesco a trovare nulla nello standard C++ che lo renderebbe valido. Qualche idea per cui funziona?
Edit:
Un'altra osservazione:
void i()
{
Y y;
Y::X x2 = y.g(); // Error: class Y::X is private
x2.f(); // Error
auto x3 = y.g(); // OK
x3.f(); // OK
}
Entrambe le funzioni sono 'public' e in realtà non si utilizza' X' ovunque. –
La definizione di 'X' è privata, ma la funzione' g() 'è pubblica. Quindi non c'è nessun problema. – Chiel