似乎“使用函数名”只能隐藏普通函数,但不能隐藏操作数的友元函数或操作数的同一名称空间中的函数。我能正确理解吗?
示例1:
void swap(int)
{
}
void foo()
{
using std::swap;
int i=10,j=20;
swap(i); //compile error ,because std::swap hidden void swap(int)
}
示例2:
class Cat {
friend void swap(Cat&, Cat&);
};
void swap(Cat &lhs, Cat &rhs)
{
cout<<"call cat friend swap"<<endl;
}
class Foo
{
public:
Cat h;
};
void swap(Foo &lhs, Foo &rhs)
{
using std::swap;
swap(lhs.h, rhs.h); //compile ok. will print out
//call cat friend swap
}
答案 0 :(得分:2)
你的观察是正确的。
using
在本地级别引入了一个名称,该名称隐藏了封闭名称空间中的名称。但名称搜索也使用依赖于参数的查找,这仍然可以工作(也可能会找到一些隐藏的名称)。如果您想要找到std::swap
而没有其他内容,请写下std::swap(i);
。