C++ 向量推回转发?

C++ 向量推回转发?,c++,c++11,std,C++,C++11,Std,我在代码中执行类似的操作 S s; s.a=1 s.b=2 v.push_back(s) < C++现在已经转发了,我能写一些类似的东西吗? v.push_back(1,2) 仅供参考,VisualStudio支持转发,因为以下内容按预期工作 //http://herbsutter.com/gotw/_102/ template<typename T, typename ...Args> std::unique_ptr<T> make_unique( Args&

我在代码中执行类似的操作

S s;
s.a=1
s.b=2
v.push_back(s)
< C++现在已经转发了,我能写一些类似

的东西吗?
v.push_back(1,2)
仅供参考,VisualStudio支持转发,因为以下内容按预期工作

//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)... ) );
}
//http://herbsutter.com/gotw/_102/
模板
std::unique_ptr使_唯一(Args&&…Args)
{
返回std::unique_ptr(新的T(std::forward(args)…);
}

您可以使用
std::vector::emplace\u back
,它将使用拟合构造函数在原地创建对象。这当然需要定义这样的构造函数

v.emplace_back(1,2);
从C++11开始,每个std容器都提供了一个类似于emplace的函数,该函数提供了上述行为


兼容性说明:MSVC可能还不支持这一点,因为它只支持CTP中的可变模板,这不会影响标准库,并且gcc的libstd++仍然缺少关联容器中的emplace成员函数

您可以使用
std::vector::emplace\u back
,它将使用fitting构造函数在原地创建对象。这当然需要定义这样的构造函数

v.emplace_back(1,2);
从C++11开始,每个std容器都提供了一个类似于emplace的函数,该函数提供了上述行为


兼容性说明:MSVC可能还不支持这一点,因为它只支持CTP中的可变模板,这不会影响标准库,并且gcc的libstd++仍然缺少关联容器中的emplace成员函数

push\u back
不支持转发,但新的
emplace\u back
支持转发

但是,
push_back
不支持初始值设定项列表:

v.push_back({1,2});

push_-back
不支持转发,但新的
emplace_-back
支持转发

但是,
push_back
不支持初始值设定项列表:

v.push_back({1,2});

这正是我想要的。有编译器支持这种语法吗?看起来MSVC不支持
{}
,请在上查看示例,看看它是否可以编译。(如果不是,那么MSVC还没有与C++11兼容,您将不得不使用
emplace\u back
)。它没有。GCC支持这一点吗?我没有安装它,或者我的Clang版本上有一个旧版本的Works,所以我怀疑这只是MSVC中未实现的功能。这正是我想要的。有编译器支持这种语法吗?看起来MSVC不支持
{}
,请在上查看示例,看看它是否可以编译。(如果不是,那么MSVC还没有与C++11兼容,您将不得不使用
emplace\u back
)。它没有。GCC支持这一点吗?我没有安装它,或者我的Clang版本上有一个旧版本的Works,所以我怀疑这只是MSVC中一个未实现的功能。