繁体   English   中英

为什么在使用namespace指令时没有为函数预先添加名称空间?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM