HaoQChen.github.io
HaoQChen.github.io copied to clipboard
Prefer push_back() over emplace_back() unless you know you need it
https://github.com/HaoQChen/HaoQChen.github.io/blob/3d2bf73f61c1d215e9864d7ef3db3b2bbcd9d015/_posts/understand_cpp/2020-01-17-emplace_back-vs-push_back.md?plain=1#L40-L45
emplace_back
有调用 explicit
构造函数,而 push_back
并不会。如下示例使用 push_back
就会告诉你可能误用,而使用 emplace_back
语义就没那么清楚了,在没有见到 v
的声明的情况下,你可能会认为压入 10
,实际却构造了一个含有 10 个元素的容器。
std::vector<std::vector<size_t>> v;
v.emplace_back(10);
std::cout << v[0].size() << std::endl; // 10
所以,一般情况下优先使用 push_back
来复制或移动对象,对于需要使用参数构造容器元素时才有必要使用 emplace_back
。