(1) unordered_map 模板有如下的模板调用和包含关系。
绿箭头1 处的模板类,继承了绿箭头2 , 绿箭头2 又继承了红框模板。但红框模板有一个泛化版本和一个特化版本,选择哪一个呢?
经过源代码查找,_Hasher = hash<_Kty>,和 _Keyeq = equal_to<_Kty>里都没有 is_transparent 的定义。而哈希时int 整数应该是最常用的情况。所以应该是透明容器。以下做了运行验证。先修改STL源文件,如下图,添加两个验证函数
再进行打印输出:
所以应该是继承了泛化版本,就是透明的哈希容器。虽然,还不知道透明是啥意思。只是这个模板里强制了一个类型引用。
这个结论先这么认为。把源码改回去。继续,随后补充。谢谢