mad*_*adu 3 c++ argument-dependent-lookup
依赖于参数的查找说:
对于类类型的参数(包括union),该集合包含... a)类本身b)...
那为什么printX找不到X?
#include<iostream>
using namespace std;
class A {
public:
static const int X = 1;
};
class B {
public:
static void printX(A a)
{
cout << "X is " << X << endl;
}
};
int main(int argc, char** argv)
{
A a;
B::printX(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这不是ADL应该做的事情.ADL适用于非限定函数调用,并且首先在定义了参数类型的名称空间中搜索该函数.
例,
namespace N
{
struct A {};
void f(A const &) {}
}
N::A a;
N::f(a); //qualified function call. ADL is not needed.
f(a); //unqualified function call. ADL works here
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,来自命名空间的f(a)调用.由于是非限定函数调用,ADL使编译器能够首先在命名空间中搜索函数,因为参数的类型定义在.f()Nf(a)fNaN
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |