将 emplace_back
与某些结构 S
的左值一起使用是否具有实际意义:
像这样:
std::vector<S> v;
auto s = S(/*...*/);
v.emplace_back(s);
不仅仅是:
v.emplace_back(/* S constructor arguments */);
或者它只是简单地误用了 emplace_back
,这只是碰巧起作用,因为 const S&
(因此是一个复制构造函数)是 Args 的合法实例化。 .. args
inside emplace_back
, 并且没有被明确禁止?
最佳答案
正如您已经说过的,传递 const S&
只会调用复制构造函数。
除非您打算在将其传递给 emplace_back
之前以某种方式使用 s
,否则这不一定是明智的。
但是,如果创建 s
的代码特别长,将它和 emplace_back
的代码放在不同的行中可以提高可读性。编译器非常擅长优化这种情况,并且可能无论如何都会生成相同的代码(如果复制构造函数是默认的)。基本示例:https://godbolt.org/z/D1FClE
如果它提高了可读性或可维护性,就去做,否则就没有值(value)。
关于c++ - 带左值表达式的 std::vector::emplace_back,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55222962/