[英]Why no namespace prepended for function when using namespace directive?
这个c ++文件......
namespace foo {
class C {
void m();
};
void f();
}
using namespace foo;
void C::m() {}
void f() {}
..使用以下符号编译到目标文件:
$ g++ foo.cpp -c
$ nm foo.o -C
000000000000000a T f()
0000000000000000 T foo::C::m()
为什么C::m()?
得到名称空间前置,但不是f()
?
(II而不是using namespace foo
使用namespace foo {...}
然后两个名称都有foo
前置)。
在void C::m() {}
, C::m
是限定名,并且这样的定义总是引用先前声明的内容。 编译器查找C
,发现C
实际上是foo::C
,这要归功于using-directive ,并且它将void C::m(){}
作为foo::C::m()
的定义。
当你编写void f() {}
,这是一个非限定名,它总是在当前命名空间中声明该函数,该命名空间是全局命名空间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.