Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在使用emplace\u back向向量添加元素时,如何强制编译器使用默认构造函数?_C++_C++11 - Fatal编程技术网

C++ 在使用emplace\u back向向量添加元素时,如何强制编译器使用默认构造函数?

C++ 在使用emplace\u back向向量添加元素时,如何强制编译器使用默认构造函数?,c++,c++11,C++,C++11,在使用emplace\u back向向量添加元素时,如何强制编译器使用默认构造函数 #include <vector> #include <utility> enum E {E1, E2}; struct A { A(){} A(int i){} }; int main() { std::vector<std::pair<E, A>> testMap; testMap.emplace_back(E1, 10); // t

在使用emplace\u back向向量添加元素时,如何强制编译器使用默认构造函数

#include <vector>
#include <utility>

enum E {E1, E2};

struct A
{
  A(){}
  A(int i){}
};

int main()
{
  std::vector<std::pair<E, A>> testMap;

  testMap.emplace_back(E1, 10);
  // testMap.emplace_back(E2);
}
#包括
#包括
枚举E{E1,E2};
结构A
{
A(){}
A(int i){}
};
int main()
{
向量测试图;
测试图。向后安放(E1,10);
//测试图。安置在后方(E2);
}
注释掉的行给出了以下错误:
错误C2664:“std::pair::pair(const std::pair&”):无法将参数1从“E”转换为“const std::pair&”

就像不能从
E1
构造
std::pair
一样,也不能放置它。因此,只需提供一个默认的
a

testMap.emplace_back(E1, A{});

就像不能从
E1
构造
std::pair
一样,也不能放置它。因此,只需提供一个默认的
a

testMap.emplace_back(E1, A{});

接受的答案确实调用了
的默认构造函数。但它也调用
编译器提供的move构造函数。如果只想调用
的默认构造函数,可以执行以下操作:

testMap.emplace_back(std::piecewise_construct, std::forward_as_tuple(E1),
                                               std::forward_as_tuple());
或者这里有一个小的重新拼写:

testMap.emplace_back(std::piecewise_construct, std::forward_as_tuple(E1),
                                               std::tuple<>{});

但是,如果您想保存对
a(a&&)
的调用,这就是方法。

接受的答案确实调用
a
的默认构造函数。但它也调用
编译器提供的move构造函数。如果只想调用
的默认构造函数,可以执行以下操作:

testMap.emplace_back(std::piecewise_construct, std::forward_as_tuple(E1),
                                               std::forward_as_tuple());
或者这里有一个小的重新拼写:

testMap.emplace_back(std::piecewise_construct, std::forward_as_tuple(E1),
                                               std::tuple<>{});
但是,如果您想保存对
a(a&&)
的调用,那么这就是方法