为什么std::swap
已移至C ++ 11的<utility>
标头?
N3290 C.2.7说:
17.6.3.2
对原始功能的影响:功能交换移动到不同的标题
理由:删除
<algorithm>
对互换的依赖。对原始功能的影响:编译的有效C ++ 2003代码期望交换位于
<algorithm>
,但可能必须包含<utility>
。
我无法用粗体理解这部分。正在谈论什么样的依赖性以及为什么?
答案 0 :(得分:33)
委员会希望允许您使用swap()
,而不会对大型且更复杂的<algorithm>
头文件引入编译时依赖性。因为swap()
被如此广泛地使用,所以让你在尽可能少的额外行李中引入其定义是有意义的;这通常会导致更快的编译时间,而不需要<algorithm>
的文件。它的新家可以在不引入不必要的开销的情况下使用它。