【发布时间】:2015-01-24 21:40:15
【问题描述】:
为什么vector::push_back 不采用转发引用而不是两个重载?我读过你想要重载左值和右值的唯一原因是如果你的函数对它们做了不同的事情,那么vector::push_back 的重载除了移动/复制之外有何不同?
【问题讨论】:
-
我认为
push_back的转发参考版本就叫emplace_back。 -
@Barry
emplace_back将引用转发到元素类型的 构造函数 的参数。 -
@templateboy 我不明白重点。
push_back(T&&)也将其参数移动到元素类型的构造函数中。 -
@Barry 不。
T是向量的元素类型,但emplace_back采用Args&&... args并将args...转发给构造函数,就像element_type(std::forward<Args>(args)...)一样。在push_back中没有这样做 -
但如果
value_type有复制构造函数,那么emplace_back可以用作push_back的更通用版本。