std::swap 是否保证通过 ADL 找到非会员交换?
Is std::swap guaranteed to find nonmember swap by ADL?
Torsten T. Will 关于 C++11 的教科书说,自 C++11 起,如果定义了非成员函数,std::swap
将使用 ADL 找到的非成员函数 swap
,因此模式
using std::swap;
swap (obj1, obj2);
总是可以用简单的
代替
std::swap (obj1, obj2);
很遗憾,我在其他地方没有找到这样的说法。
真相是什么?
来自 C++14(或更具体地说是 N4140):
Requires: Type T
shall be MoveConstructible (Table 20) and MoveAssignable (Table 22).
Effects: Exchanges values stored in two locations.
这里没有关于调用 non-member swap
的内容。所以不,不能保证 std::swap
是通过 non-member swap
.
实现的
目前还不完全清楚一个实现是否可以根据 user-defined、non-member ADL swap
.
来实现 std::swap
Torsten T. Will 关于 C++11 的教科书说,自 C++11 起,如果定义了非成员函数,std::swap
将使用 ADL 找到的非成员函数 swap
,因此模式
using std::swap;
swap (obj1, obj2);
总是可以用简单的
代替std::swap (obj1, obj2);
很遗憾,我在其他地方没有找到这样的说法。
真相是什么?
来自 C++14(或更具体地说是 N4140):
Requires: Type
T
shall be MoveConstructible (Table 20) and MoveAssignable (Table 22). Effects: Exchanges values stored in two locations.
这里没有关于调用 non-member swap
的内容。所以不,不能保证 std::swap
是通过 non-member swap
.
目前还不完全清楚一个实现是否可以根据 user-defined、non-member ADL swap
.
std::swap