11

swap函数模板在 C++0x 中从移动<algorithm>到。<utility>前者是否在 C++0x 中包含后者?还是它们都包含定义的通用标题swap

换句话说,以下代码是否保证在 C++0x 中编译?

#include <algorithm>   // will this pull in std::swap?

// ...

using std::swap;
swap(a, b);
4

1 回答 1

15

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 的代码之间,有一个选择。

于 2011-08-11T10:23:17.773 回答