您能解释一下“完美转发”的工作原理吗?
我读到向量的 emplace_back 不需要复制或移动对象,因为它的参数是作为可变参数模板实现的。
std::vector<T>::emplace_back(_Args&&... __args)
你能更详细地描述一下吗?为什么它不会复制也不会移动?
emplace_back
直接在向量中的正确位置构造元素。想想就好像
vector<T> v;
v.emplace_back(a,b,c);
转换为(idx 为新索引)
new (v.data()+idx) T(a,b,c);
(实际情况有点复杂,涉及转发参数 asstd::forward<_Args>()...
但获取 emplace 操作的密钥可能会更令人困惑)
在 emplace_back 中实际上发生了两件事: