23

为什么std::swap已移至<utility>C++11 的标头?

N3290 C.2.7 说:

17.6.3.2

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

理由:移除对交换的依赖。<algorithm>

对原始功能的影响:已编译的有效 C++ 2003 代码预期交换在其中,<algorithm>可能必须改为包含<utility>.

我无法理解粗体部分。正在谈论什么样的依赖,为什么?

4

1 回答 1

38

委员会希望允许您在swap()不引入对大型且更复杂的<algorithm>头文件的编译时依赖的情况下使用。因为swap()使用如此广泛,所以让您在尽可能少的额外负担的情况下提取其定义是有意义的;这通常会导致不需要的文件的编译时间更快<algorithm>。它的新家允许在不引入不必要的开销的情况下使用它。

于 2011-05-22T04:39:44.410 回答