Questions tagged «copy-and-swap»

5
什么是复制和交换习语?
这个习语是什么,什么时候应该使用?它可以解决哪些问题?使用C ++ 11时,习惯用法会改变吗? 尽管在很多地方都提到过它,但是我们没有任何奇异的“这是什么”的问题和答案,所以就在这里。这是先前提到的地方的部分列表: 您最喜欢的C ++编码样式惯用法是什么:复制交换 在C ++中复制构造函数和=运算符重载:是否可能使用通用函数? 什么是复制省略及其如何优化复制和交换习惯 C ++:动态分配对象数组?

2
公共朋友交换成员功能
在对复制和交换惯用语的漂亮回答中,有一段代码我需要一些帮助: 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这里不需要这个,对吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.