我有这段代码:
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
你能解释一下为什么吗?
答案 0 :(得分:4)
除std::vector::emplace_back以外,std::vector::emplace要求元素类型符合MoveAssignable的要求,但std::pair<const std::string, int>
有const std::string
作为其第一个元素,则不满足那个。
类型要求
- T(容器的元素类型)必须符合MoveAssignable,MoveInsertable和EmplaceConstructible的要求。