Dan*_*und 9 c++ namespaces linkage
这个c ++文件......
namespace foo {
class C {
void m();
};
void f();
}
using namespace foo;
void C::m() {}
void f() {}
Run Code Online (Sandbox Code Playgroud)
..使用以下符号编译到目标文件:
$ g++ foo.cpp -c
$ nm foo.o -C
000000000000000a T f()
0000000000000000 T foo::C::m()
Run Code Online (Sandbox Code Playgroud)
为什么要C::m()?预先添加命名空间,但不是f()?
(II代替using namespace foo使用,namespace foo {...}然后两个名字都有foo前缀).
T.C*_*.C. 12
在void C::m() {},C::m是一个限定名称,这样的定义总是指先前声明的东西.编译器查找C,发现C实际上foo::C,由于using指令,它需要void C::m(){}作为定义foo::C::m().
在编写时void f() {},这是一个非限定名称,它总是在当前命名空间中声明该函数,该命名空间是全局命名空间.