我错过了一些东西std::make_shared。它不能解决 a 的类型std::initializer_list,还是我做错了什么?
#include <vector>
#include <memory>
class A {};
int main()
{
A a;
std::vector<A> veca{A(), A{}, a}; // this works ofc
std::vector<A> vecb({A(), A{}, a}); // this too
std::make_shared<std::vector<A>>(vecb); // and this, ofc
std::make_shared<std::vector<A>>({a}); // what's wrong here?
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误:
main.cpp:21:41: error: too many arguments to function ‘std::shared_ptr<_Tp1> std::make_shared(_Args&& ...) [with _Tp = std::vector; _Args = {}]’
std::make_shared<std::vector<A>>({a});
^
In file included from /usr/include/c++/6/memory:82:0,
from main.cpp:10:
/usr/include/c++/6/bits/shared_ptr.h:632:5: note: declared here
make_shared(_Args&&... __args) …Run Code Online (Sandbox Code Playgroud) 我定义了以下内容
std::vector<std::pair<int,int> > my_vec;
my_vec.push_back( {1,2} ); //this works
my_vec.emplace_back( {1,2} ); // this doesn't work
std::pair<int,int> temp_pair = {1,2};
my_vec.emplace_back( temp_pair ); //this works
Run Code Online (Sandbox Code Playgroud)
我正在使用c ++ 11进行编译。第三行是有问题的,但是我认为您可以emplace_back()在任何地方使用push_back(),但这显然是错误的。为什么第三行不起作用?