3

看来“使用函数名”只能隐藏普通函数,而不能隐藏操作数的友元函数或操作数同一命名空间中的函数。我是否正确理解这一点?

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

1 回答 1

2

你的观察是正确的。

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

于 2013-07-19T20:02:01.033 回答