为什么在使用命名空间指令时没有为函数添加命名空间
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()
没有?
(如果I用namespace foo {...}
代替using namespace foo
,则两个名称前都有foo
)。
在void C::m() {}
中,C::m
是一个限定名,这样的定义总是指先前声明的东西。编译器查找C
,由于using指令,发现C
实际上是foo::C
,并将void C::m(){}
作为foo::C::m()
的定义。
当您编写void f() {}
时,这是一个非限定名,并且它总是在当前命名空间(即全局命名空间)中声明该函数。
相关文章:
- 在命名空间中定义函数还是限定函数
- CUDA内核和数学函数的显式命名空间
- 在命名空间中使用全局命名空间中的函数
- 是否可以将函数导入命名空间,但不能导出它?
- 使用另一个命名空间中的函数C++
- Visual Studio 无法解决类和命名空间中重载的明确函数
- 命名空间更改函数定义
- C++命名空间中调用 void 函数的错误
- C++ 17 个友元函数声明和内联命名空间
- MFC 函数来自 :: 命名空间?
- 使用类指针重载C++命名空间函数模板专用化替代方法?
- 在头文件中添加命名空间函数
- 命名空间函数的多重定义
- 在多个 cpp 文件中重用未命名的命名空间函数
- 如何正确声明命名空间函数
- 使用 libclang 解析命名空间函数
- C++命名空间函数
- 内联命名空间函数时出错
- 递归std::functional与递归匿名命名空间函数.使用哪一个
- 如何在命名空间函数中使用pragma weak