公共朋友交换成员功能
在对复制和交换惯用语的漂亮回答中,有一段代码我需要一些帮助: 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); } // ... }; 然后他加了一张纸条 还有其他一些主张,我们应该为我们的类型专门使用std :: swap,在提供免费交换功能的同时提供类内交换,等等。但这都是不必要的:对交换的任何正确使用都将通过不合格的调用,我们的功能将通过ADL找到。一种功能会起作用。 随着friend我对“不友好”的条款一点,我必须承认。因此,我的主要问题是: 看起来像一个自由函数,但是它在类体内? 为什么这不是swap静态的?它显然不使用任何成员变量。 “任何正确使用交换的方法都会通过ADL找出交换”?ADL将搜索名称空间,对吗?但是它也可以在类内部查看吗?还是在这里friend进来? 附带问题: 随着C ++ 11,我要记住我的swaps的noexcept? 随着C ++ 11和它的范围,对,我应该将friend iter begin()和friend iter end()在类中以同样的方式?我认为friend这里不需要这个,对吗?