std::vector emplace 和 std::vector emplace 返回成对

Phạ*_*ông 3 c++ stl vector c++11 emplace

我有这个代码:

std::vector<std::pair<const std::string, int>> vec;

vec.emplace_back("a", 1); //success
vec.emplace(vec.end(), "b", 2); //compile error

vec.emplace_back(std::make_pair<const std::string, int>("c", 3));  //success
vec.emplace(vec.end(),
     std::make_pair<const std::string, int>("d", 4)); //compile error
Run Code Online (Sandbox Code Playgroud)

你能解释一下为什么吗?

son*_*yao 6

除了std::vector::emplace_back之外,std::vector::emplace要求元素类型满足MoveAssignable的要求,但std::pair<const std::string, int>作为const std::string其第一个元素则不满足这一要求。

类型要求