Torsten T. Will在C++11上的一本教科书说,自从C++11以来,如果定义了这样一个非会员函数,std::swap将使用ADL找到的非成员swap,因此模式
using std::swap;
swap (obj1, obj2);总是可以用一个简单的
std::swap (obj1, obj2);不幸的是,我在其他地方没有找到这样的声明。
真相是什么?
发布于 2015-12-29 16:17:24
来自C++14 (或更具体地说是N4140):
要求:
T类型应为MoveConstructible (表20)和MoveAssignable (表22)。效果:交换存储在两个位置的值。
这里没有任何关于调用非会员swap的内容。因此,没有任何保证std::swap是通过非会员swap实现的.
目前还不完全清楚的是,是否允许一个实现按照用户定义的、非会员的ADL std::swap来实现swap。
https://stackoverflow.com/questions/34514788
复制相似问题