我有简单的namespace
,它有一个变量和一个函数。在main
中,我尝试调用没有名称空间限定符的函数,以及使用名称空间限定符调用变量。
namespace SAM
{
int p = 10;
void fun(int)
{
cout<<"Fun gets called";
}
}
int main()
{
fun(SAM::p);//why SAM::fun is not get called?
return 0;
}
我无法称之为有趣,为什么它不符合ADL(依赖于参数的名称查找)?
我在Visual Studio中遇到以下错误。
'fun':找不到标识符
如果我使用SAM::fun
,则可行。
答案 0 :(得分:5)
类型采用ADL,而非变量,例如
namespace SAM
{
struct P {};
void fun(P)
{
cout<<"Fun gets called";
}
}
int main()
{
SAM::P p;
fun(p);
return 0;
}
在C ++编程语言中,依赖于参数的查找(ADL)或 参数依赖名称查找,适用于查找 非限定函数名称取决于参数的类型 给函数调用。