【发布时间】:2011-05-17 06:05:24
【问题描述】:
我对@987654324@ 和emplace_back 之间的区别有点困惑。
void emplace_back(Type&& _Val);
void push_back(const Type& _Val);
void push_back(Type&& _Val);
由于push_back 重载采用右值引用,我不太明白emplace_back 的用途是什么?
【问题讨论】:
-
请注意(正如 Thomas 下面所说),问题中的代码来自 MSVS 的 C++0x emulation,而不是 C++0x 的实际代码。跨度>
-
更适合阅读的论文是:open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2345.pdf。 N2642 主要是标准的措辞; N2345 是解释和激发这个想法的论文。
-
请注意,即使在 MSVC10 中,也有一个采用 universal reference 的
template <class _Valty> void emplace_back(_Valty&& _Val)版本,它提供了对explicit单参数构造函数的完美转发。 -
相关:在任何情况下
push_back比emplace_back更可取吗?我能想到的唯一情况是,如果一个类在某种程度上是可复制的 (T&operator=(constT&)) 但不可构造 (T(constT&)),但我想不出为什么有人会想要那样。
标签: c++ visual-studio-2010 stl c++11 move-semantics