目录
三.C++中的ADL和using namespace的联系与区别
一.C++中的ADL是什么
在C++中,ADL代表“Argument-Dependent Lookup”,即“参数依赖查找”。这是一种机制,允许编译器在查找函数名时,根据传递给函数的参数类型来决定查找的命名空间。简单来说,ADL允许编译器在不同的命名空间中查找与参数类型匹配的函数。
例如,如果你有一个函数重载集,并且你想调用一个函数,其参数类型与某个命名空间中的类型匹配,编译器会优先选择那个命名空间中的函数,而不是全局命名空间中的同名函数。
下面是一个简单的例子来说明ADL的概念:
#include <iostream>
#include <vector>
namespace A {
struct MyType {};
void print(const MyType&) {
std::cout << "Print from namespace A" << std::endl;
}
}
namespace B {
struct MyType {};
void print(const MyType&) {
std::cout << "Print from namespace B" << std::endl;
}
}
int main() {
A::MyType a;
B::MyType b;
// 这里会调用 A 命名空间中的 print 函数,因为 a 的类型是 A::MyType
print(a);
// 这里会调用 B 命名空间中的 print 函数,因为 b 的类型是 B::MyType
print(b);
return 0;
}
在这个例子中, print 函数在两个不同的命名空间中都有定义,并且它们都接受一个 MyType 类型的参数。当调用 print 函数时,ADL机制会根据传递给函数的参数的类型来决定调用哪个命名空间中的 pr

最低0.47元/天 解锁文章
71

被折叠的 条评论
为什么被折叠?



