gpt4 book ai didi

c++ - 为什么在使用命名空间指令时没有为函数添加命名空间?

转载 作者:可可西里 更新时间:2023-11-01 16:35:28 24 4
gpt4 key购买 nike

这个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()

(我不是使用 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() {} 时,这是一个非限定名称,它始终在当前命名空间(即全局命名空间)中声明该函数。

关于c++ - 为什么在使用命名空间指令时没有为函数添加命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30476908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com