“使用函数名”只能隐藏普通函数?

时间:2013-07-19 18:26:10

标签: c++

似乎“使用函数名”只能隐藏普通函数,但不能隐藏操作数的友元函数或操作数的同一名称空间中的函数。我能正确理解吗?

示例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
}

1 个答案:

答案 0 :(得分:2)

你的观察是正确的。

using在本地级别引入了一个名称,该名称隐藏了封闭名称空间中的名称。但名称搜索也使用依赖于参数的查找,这仍然可以工作(也可能会找到一些隐藏的名称)。如果您想要找到std::swap而没有其他内容,请写下std::swap(i);