fre*_*low 11 c++ vector pod c++11 emplace
是否有可能与POD进驻?它似乎在Visual Studio 2012中不起作用:
struct X
{
int a;
int b;
};
void whatever()
{
std::vector<X> xs;
X x = {1, 2};
// okay
xs.push_back(x);
// okay
xs.emplace_back(x);
//error C2661: 'X::X': error C2661: no overloaded function takes 2 arguments
xs.emplace_back(1, 2);
}
Run Code Online (Sandbox Code Playgroud)
这只是Visual Studio 2012的一个缺点,还是放置POD根本无法在C++ 11中运行?
没有构造函数X::X(int,int),这是您调用emplace_back它来构造X对象的内容.容器用于allocator_traits<A>::construct(allocator, p, args)构造对象,其中p是指向某个已分配空间的指针,并且args是传递给构造函数的参数.这是用来的emplace_back.此construct函数调用::new((void*)p) T(std::forward<Args>(args)...),因此不使用统一初始化.
xs.emplace_back({1, 2})尽管可以使用列表初始化构建聚合,但也将是一个错误.那是因为无法转发大括号括起的初始化列表.
| 归档时间: |
|
| 查看次数: |
2565 次 |
| 最近记录: |