thể trùng lặp:
C++11 emplace_back on vector<struct>?emplacing một POD
là emplacement thể với PODs? Dường như nó không hoạt động trong 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);
}
Đây có phải chỉ là thiếu sót của Visual Studio 2012, hay không đặt POD đơn giản không hoạt động trong C++ 11?
Nó xây dựng nó tại chỗ. Không có nhà xây dựng như thế. – chris
Tôi sẽ không xem xét nó dứt khoát, nhưng g ++ (4.7.1) không chấp nhận nó. –
Tôi nghĩ rằng bạn có thể phải có một hàm tạo cho 'X' có hai đối số (như thông báo lỗi gợi ý). –