【发布时间】:2014-06-26 14:21:28
【问题描述】:
在使用std::vectors、std::lists(或其他 STL 容器)时,我碰巧经常写这个,因为代码简短(而不是每次都显式地输入vec[index])和内存分配效率(避免复制/move),我想我不是唯一这样做的人:
std::vector<A> vec;
vec.emplace_back();
A &element = vec[vec.size()-1];
element.prop = "value";
为什么 STL 容器的 emplace、emplace_back 和 emplace_front 方法不返回 T&? 它允许人们简单地编写这个而不是使用阴暗的 @987654329 @:
std::vector<A> vec;
A &element = vec.emplace_back();
element.prop = "value";
【问题讨论】:
-
这里有
vector::back()... -
我认为
emplace_back具有void返回类型最可能的理由是与其他值插入方法对称,例如push_back。编写一个执行emplace_back并返回您正在寻找的参考的实用函数并不难。 -
@Deduplicator。好问题,不知道。我想是遗留(和兼容性);也许从来没有想过。
-
其他人可能也在想为什么你不能这样做:
vec.emplace_back().emplace_back() -
我真的不知道他们为什么要这么做。他们的名字没有告诉我他们应该返回一个值。而且它不会给你带来任何效率方面的东西。
标签: c++ c++11 stl return-value