Questo file ++ c ...Perché lo spazio dei nomi non è stato aggiunto alla funzione quando si utilizza la direttiva namespace?
namespace foo {
class C {
void m();
};
void f();
}
using namespace foo;
void C::m() {}
void f() {}
..Compiles in un file oggetto con questi simboli:
$ g++ foo.cpp -c
$ nm foo.o -C
000000000000000a T f()
0000000000000000 T foo::C::m()
Perché C::m()?
ottenere il namespace anteposto, ma non f()
?
(I I al posto di using namespace foo
uso namespace foo {...}
poi entrambi i nomi ha foo
anteporre).
Come la risposta mostra, non essere avventato a saltare alle conclusioni quando scrivi domande. Se qualcosa è sorprendente, è meglio stare attenti a come ci si avvicina all'apparente contraddizione e chiedere qualcosa come "Il collegamento è diverso?" piuttosto che supponendo che lo faccia (poiché in effetti il collegamento non ha nulla a che fare con la tua situazione, tutti i collegamenti coinvolti sono esterni). –
@KerrekSB Ho aggiornato il titolo per non fare supposizioni sulla causa. (Troppo spesso mischia link, scope e allocazione dello storage quando si ha a che fare con C++). –
Molto apprezzato! –