namespace ns { struct A { void foo() {} }; void bar(A a) { a.foo(); // 编译通过,能够找到 ns::foo 函数 } void foo(A a) {} } int main() { ns::A a; ns::foo(a); // 编译错误,找不到 ns::foo 函数 return 0; }这段代码并没有所谓的编译错误
时间: 2024-04-06 09:30:48 浏览: 111
JSONLab: a toolbox to encode/decode JSON files 源码
非常抱歉,我在上一个回答中犯了一个错误,确实上面的代码是没有编译错误的。这是因为 `ns::foo` 函数不是一个 ADL 候选函数,因为它没有与参数类型相关的参数。因此,在调用 `ns::foo` 函数时,编译器只会在命名空间 `ns` 中查找函数,而不会进行 ADL 搜索。
感谢您发现了我的错误,我会更加谨慎地回答问题。
阅读全文