相关疑难解决方法(0)

公共交换成员函数

复制和交换习语的漂亮答案中,有一段代码我需要一些帮助:

class dumb_array
{
public:
    // ...
    friend void swap(dumb_array& first, dumb_array& second) // nothrow
    {
        using std::swap; 
        swap(first.mSize, second.mSize); 
        swap(first.mArray, second.mArray);
    }
    // ...
};
Run Code Online (Sandbox Code Playgroud)

他补充说明

还有其他声称我们应该专门为我们的类型使用std :: swap,提供一个类内交换以及一个自由函数交换等等.但这都是不必要的:任何正确使用swap都将通过一个不合格的调用,我们的功能将通过ADL找到.一个功能就可以了.

随着friend我对"不友好"的条款一点,我必须承认.所以,我的主要问题是:

  • 看起来像一个自由函数,但它在类体内?
  • 为什么这不是swap静态的?它显然不使用任何成员变量.
  • "任何正确使用交换都会发现通过ADL进行交换"?ADL会搜索命名空间,对吧?但是它也看到了课程内部吗?或者在这里friend进来?

副题:

  • 随着C++ 11,我要记住我的swaps的noexcept
  • 随着C++ 11和它的范围,对,我应该将friend iter begin()friend iter end()在类中以同样的方式?我觉得friend这里不需要,对吗?

c++ friend copy-and-swap c++11

154
推荐指数
2
解决办法
2万
查看次数

标签 统计

c++ ×1

c++11 ×1

copy-and-swap ×1

friend ×1