cpp 问题请教

2019-11-09 19:32:51 +08:00
 codechaser
#include <iostream>
using namespace std;
namespace foo
{
struct Foo
{
};
void f(Foo)
{
    cout << "f";
}
} // namespace foo
int main()
{
    foo::Foo foo;
    f(foo);
    return 0;
}

这里为什么不会报错呢? foo 命名空间没带直接使用了 f(),跟 foo 这个变量有何关系呢?

3355 次点击
所在节点    C++
6 条回复
koebehshian
2019-11-09 19:45:36 +08:00
当然是靠参数的命名空间猜到: https://en.cppreference.com/w/cpp/language/adl
RicardoY
2019-11-09 20:17:06 +08:00
函数的参数是类类型的话就还要查找参数类型所在的命名命名空间吧..依稀记得 primer 上特意提过
codechaser
2019-11-09 23:01:34 +08:00
@RicardoY 受教!
jorneyr
2019-11-10 07:42:15 +08:00
void f(Foo) 不报错,因为函数 f 和结构体 Foo 在同一个命名空间里,仔细看括号。

只有使用类型的时候才需要命名空间 (即访问 Foo),foo 已经是变量了。
codechaser
2019-11-10 09:21:51 +08:00
@jorneyr 我想问的是 f(foo)的调用为啥不会报错。f 是在 foo 里的啊
jorneyr
2019-11-10 09:43:22 +08:00
@codechaser 发现看错地方了 =_=!!!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/617972

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX