是否仍然可以通过在C ++ 0x中包含算法来定义std :: swap?

时间:2011-08-11 10:14:43

标签: c++ c++11 header-files swap c++-standard-library

{C} 0x中swap函数模板已从<algorithm>移至<utility>。前者是否在C ++ 0x中包含后者?或者它们都包含定义swap的公共标题?

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

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

// ...

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

1 个答案:

答案 0 :(得分:15)

FDIS(n3290),附件C,“兼容性”,C.2.7说:

  

17.6.3.2

     

对原始功能的影响:功能交换移动到不同的位置   标题

     

理由:删除对&lt; algorithm&gt;的依赖性换掉。

     

E ff ect   原始功能:已编译的有效C ++ 2003代码   交换到&lt; algorithm&gt;可能必须改为包含&lt; utility&gt;。

所以不,它不能保证编译,这是故意改变的。单个实现是否真的会破坏C ++ 03代码是另一回事。正如你所指出的那样,通过任一标题定义swap,它们就不容易了。但是可以选择将C ++ 03代码更容易地移植到C ++ 0x,而不是帮助人们严格遵守C ++ 0x。