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