namespace X
{
template <typename T> void f(T);
}
namespace N {
using namespace X;
enum E { e1 };
void f(E) {
cout<<"N::f(E)"<<endl;
}
//void f(int) //如果打开这个函的话,作用域N里面的函数f就和外面的产生了歧义.
//{
//}
}
void f(int)
{
cout<<"::f(int)"<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
// int型形参
::f(1); // 输出::f(int)
f(1); // 输出::f(int)
cout<<endl;
// 改变形参
::f(N::e1); // 输出::f(int)
f(N::e1); // 输出N::f(int), 这里为什么改变参数后调用到namespace N里面了呢?
cout<<endl;
// 加上using namespace
using namespace N;
::f(1); // 输出::f(int)
f(1); // 输出::f(int), 这里虽然声明了using namespace N;但还是调用的外面的函数.
cout<<endl;
// 改变形参
using namespace N;
::f(N::e1); // 输出::f(int)
f(N::e1); // 输出N::f(int)
getchar();
return 0;
}
由此可见,函数的调用是和参数相关的..
函数调用与参数的关系
最新推荐文章于 2021-11-12 21:33:00 发布