Stu*_*t4K 7 c++ variadic-templates emplace
emplace_back与某些struct的左值一起使用是否有实际意义S:
像这样:
std::vector<S> v;
auto s = S(/*...*/);
v.emplace_back(s);
Run Code Online (Sandbox Code Playgroud)
不仅仅是:
v.emplace_back(/* S constructor arguments */);
Run Code Online (Sandbox Code Playgroud)
还是只是简单地滥用emplace_back,这只是因为const S&(并因此成为复制构造函数)是Args... argsinside的合法实例化而才起作用的emplace_back,并且未明确禁止使用它吗?
正如您已经说过的那样,传递const S&只会调用复制构造函数。
除非您打算s在将其传递给之前以某种方式使用,否则emplace_back它不一定是明智的。
但是,例如,如果要创建的代码s非常长,则可以将代码和代码放置emplace_back在单独的行上,从而提高可读性。编译器非常擅长优化此类情况,并且无论如何都会生成相同的代码(如果复制构造函数为默认值)。基本示例:https://godbolt.org/z/D1FClE
如果它提高了可读性或可维护性,那就去做,否则就没有任何价值。