在c++ 0x中,std::swap仍然是通过包含算法来定义的吗?

Will std::swap still be defined by including algorithm in C++0x?

本文关键字:算法 包含 定义 仍然是 0x c++ std swap      更新时间:2023-10-16

在c++ 0x中,swap函数模板从<algorithm>移到了<utility>。前者在c++ 0x中包括后者吗?或者它们都包含一个定义swap的通用头文件?

换句话说,下面的代码能保证在c++ 0x中编译吗?

#include <algorithm>   // will this pull in std::swap?
// ...
using std::swap;
swap(a, b);

FDIS (n3290),在附录C, "兼容性",C.2.7中说:

17.6.3.2

对原始功能的影响:函数交换移动到不同的位置头

基本原理:移除对交换。

影响原始功能:有效的c++ 2003代码,已编译预期交换到可能必须包含

所以,不,它不能保证编译,这是一个破坏性的改变。个别实现是否真的会破坏c++ 03代码是另一回事。正如你所指出的,他们很容易不,通过定义swap头。但是,在使c++ 03代码更容易移植到c++ 0x和帮助人们编写严格符合c++ 0x之间存在一个选择。