
#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 这个变量有何关系呢?
1 koebehshian 2019-11-09 19:45:36 +08:00 当然是靠参数的命名空间猜到: https://en.cppreference.com/w/cpp/language/adl |
2 RicardoY 2019-11-09 20:17:06 +08:00 via Android 函数的参数是类类型的话就还要查找参数类型所在的命名命名空间吧..依稀记得 primer 上特意提过 |
3 codechaser OP @RicardoY 受教! |
4 jorneyr 2019-11-10 07:42:15 +08:00 void f(Foo) 不报错,因为函数 f 和结构体 Foo 在同一个命名空间里,仔细看括号。 只有使用类型的时候才需要命名空间 (即访问 Foo),foo 已经是变量了。 |
5 codechaser OP @jorneyr 我想问的是 f(foo)的调用为啥不会报错。f 是在 foo 里的啊 |
6 jorneyr 2019-11-10 09:43:22 +08:00 @codechaser 发现看错地方了 =_=!!! |