swap
函数模板在 C++0x 中从移动<algorithm>
到。<utility>
前者是否在 C++0x 中包含后者?还是它们都包含定义的通用标题swap
?
换句话说,以下代码是否保证在 C++0x 中编译?
#include <algorithm> // will this pull in std::swap?
// ...
using std::swap;
swap(a, b);
swap
函数模板在 C++0x 中从移动<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
对原始功能的影响:函数交换移动到不同的标题
基本原理:移除对 <algorithm> 的依赖以进行交换。
对原始功能的影响:已编译的有效 C++ 2003 代码期望 swap 在 <algorithm> 中可能必须改为包含 <utility>。
所以不,不能保证编译,这是故意的重大变化。单个实现是否真的会破坏 C++03 代码是另一回事。正如您指出的那样,swap
通过任一标头定义,他们很容易做到。但是,在更容易将 C++03 代码移植到 C++0x 和帮助人们编写严格符合 C++0x 的代码之间,有一个选择。