Rya*_*yan 0 c++ stl compilation
考虑以下:
#include <map>
#include <string>
struct Key {};
int main(int argc, const char** argv) {
std::map<Key, std::string> key_map;
key_map.insert(std::make_pair(Key(), "hello"));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
显然,这不会编译,因为Key
不提供小于运算符.但是,如果我注释掉第二行main()
(只留下map
声明),它就会编译.
问题:这是为什么?在声明时,模板是否应该std::map<K, V>
强制执行K
提供小于运算符的约束?
正如您所编写的那样,地图具有类型的比较功能std::less<Key>
.在您执行尝试使用该比较函数的操作之前,代码很好.
默认构造函数创建一个没有条目的映射,因此不进行比较.当你插入时,它需要进行比较,所以它会尝试 - 并且你得到一个编译错误.
归档时间: |
|
查看次数: |
50 次 |
最近记录: |