{C} 0x中swap
函数模板已从<algorithm>
移至<utility>
。前者是否在C ++ 0x中包含后者?或者它们都包含定义swap
的公共标题?
换句话说,以下代码是否保证在C ++ 0x中编译?
#include <algorithm> // will this pull in std::swap?
// ...
using std::swap;
swap(a, b);
答案 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。