Ho provato questo codice fittizio qui sotto per testare lo spazio dei nomi senza nome.spazi dei nomi con spazio dei nomi senza nome con la stessa variabile dichiarato
Ho la seguente uscita
ctor 1
ctor 0
3
5
Sono un po 'confuso su questo.
- mi aspettavo un errore del compilatore dicendo che non può risolvere un'ambiguità per quanto riguarda
a::m_a
. Invece si riferisce sempre allo meno nidificato. È sempre il caso? Quali sono le regole che C++ sta seguendo? - Sembra che il compilatore crei la variabile CMyObj seguendo l'ordine scritto sul file. È sempre così?
- c'è un modo per accedere alla variabile
m_a
più nidificata damain()
?.
class CMyObj{
public:
CMyObj(int a){std::cout << "ctor " << a << std::endl; }
};
namespace a{
namespace{
int m_a=4;
int m_b=5;
CMyObj m_obj(1);
}
}
namespace a{
int m_a=3;
CMyObj m_obj(0);
}
int main(){
std::cout << a::m_a << std::endl; // which one?
std::cout << a::m_b << std::endl; // how this is possible?
return 0;
}
Quest'ultima frase è la chiave. Grazie. –
Ciao Gene! Grazie mille per il tuo replay (arrivando con un po 'di ritardo)! –