c++ - 带左值表达式的 std::vector::emplace_back

标签 c++ variadic-templates emplace

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/

相关文章:

用于评估指向成员的指针的 C++ 可变参数模板

c++ - 使用条件运算符递归计算模板值或函数时出现错误 C1202(堆栈溢出)

c++ unordered_map emplace 无效参数

c++ - C/C++ 中的指针和数组

c++ - 为什么这段代码在调试时慢了 100 倍?

c++ - 如何使用 C++11 可变参数模板来定义由 vector 元组支持的元组 vector ?

c++ - 将集合的随机元素添加到列表中并将其从原始集合中删除

c++ - 带有 make_unique 和 emplace_back 的简单结构

c++ - 表达式必须有类类型(学生数据库)?

c++ - 如何在 Rcpp 中加快 xts 数据到 Datetime Vector 的转换?