64,746
社区成员
发帖
与我相关
我的任务
分享
请问
1:普通函数查找和ADL(koening)查找的优先级一样吗???
2:普通函数查找的时候,一层一层查找函数,找到就停止,一直到全局函数;
那koenig是否也会一层层向更大的作用域查找呢,直到全局呢???
比如:
//-------------------------------------------------------------
// f.h
namespace N
{ name space N_1
{
class X{};
void f(X para){}
}
void f1(X para);
}
void f2(X param)
{}
//-------------------------------------------------------------
#include f.h
void main()
{
X test_x;
f(test_x); //没问题
f1(test_x); //标准的C++可以吧?koenig查找参数所在空间的上一层,可以吗??
f2(test_x); //标准的C++可以吧?koenig查找参数所在空间的全局域,是这样吗?
}
//f.h
namespace N
{ namespace N_1
{
class X{};
void f(X para){}
}
void f1(N_1::X para);
}
void f2(N::N_1::X param)
{}
#include "f.h"
using namespace N::N_1;
int main(int argc, char *argv[])
{
X test_x;
//f(test_x); //没问题
//f1(test_x); //标准的C++可以吧?koenig查找参数所在空间的上一层,可以吗??
f2(test_x); //标准的C++可以吧?koenig查找参数所在空间的全局域,是这样吗?
return 0;
}
DevCpp 2012.11,测试确实如此。f1,查不到,不会在namespace,自动向上查找;
exceptional C++ 条款34有论述,只是说某个函数会在std中查询,查询不到,然后转到上一层,就是全局域查。我感觉exceptional C++ 中,Herb Scutter讲述的有点零散,不是很好。