你能解释一下“完美转发”是如何工作的吗?
我读到向量的emplace_back不需要复制或移动对象,因为它的参数是作为可变模板实现的。
std::vector<T>::emplace_back(_Args&&... __args)你能更详细地描述一下吗?为什么它不能复制也不能移动?
发布于 2012-07-09 18:13:47
emplace_back直接在向量中的正确位置构造元素。把它想象成
vector<T> v;
v.emplace_back(a,b,c);被转换为(idx是新的索引)
new (v.data()+idx) T(a,b,c);(实际情况有点复杂,涉及到将参数作为std::forward<_Args>()...转发,但获取emplace操作的密钥可能会更令人困惑)
发布于 2012-07-09 18:17:47
在emplace_back中实际上发生了两件事:
https://stackoverflow.com/questions/11392910
复制相似问题