矢量push_back与转发?

0 c++ std c++11

我在我的代码中做了类似的事情

S s;
s.a=1
s.b=2
v.push_back(s)
Run Code Online (Sandbox Code Playgroud)

既然C++有转发,我可以写一些类似的东西

v.push_back(1,2)
Run Code Online (Sandbox Code Playgroud)

fyi visual studio支持转发,因为以下工作符合预期

//http://herbsutter.com/gotw/_102/
template<typename T, typename ...Args>
std::unique_ptr<T> make_unique( Args&& ...args )
{
    return std::unique_ptr<T>( new T( std::forward<Args>(args)... ) );
}
Run Code Online (Sandbox Code Playgroud)

inf*_*inf 5

您可以使用std::vector::emplace_back哪个将使用拟合构造函数创建对象.这当然要求您定义了这样的构造函数.

v.emplace_back(1,2);
Run Code Online (Sandbox Code Playgroud)

从C++ 11开始,每个std-container都提供类似于类似于emplace的函数,它提供了上述行为.

兼容性 - 注意:MSVC可能不支持这个,因为它只支持CTP中的可变参数模板,它不影响标准库,而gcc的libstd ++仍然缺少关联容器中的emplace成员函数.