gpt4 book ai didi

c++ - 使用 nullptr 作为 std::unordered_map 的键有什么后果吗?

转载 作者:行者123 更新时间:2023-12-01 14:43:41 25 4
gpt4 key购买 nike

执行 someMap.insert(make_pair(nullptr, nullptr)) 时是否可能出现任何副作用/问题?不包括取消引用空指针的危险。

最佳答案

其有效性完全取决于 someMap 到底是什么。是。

我们假设 someMap有一个键类型,它是一个实际的指针(也就是说,不是类似指针的类型,而是某种 T* )。

那么问题就变成了如果两个指针之一是nullptr,那么比较两个指针的有效性是什么? 。这意味着要问... map 如何比较其键类型?

std::map的关键比较是可配置的。默认情况下,它使用 std::less<Key> .

这很重要,因为使用 < 进行指针的正常排序比较或仅 imposes a partial ordering between pointer values 。可以比较同一数组中的指针,以及同一对象中指向子对象的指针(对于标准布局类型,按声明排序)。因此,不允许空指针与除另一个空指针之外的任何指针值之间进行顺序比较。

幸运的是,std::less有一个specialization for pointers which imposes a total order to all pointer values 。相比之下,定义了所有指针的总顺序。

但是,如果您提供了不同的比较类型,即基于调用 < 的比较类型。而不是std::less ,那么您不能插入 nullptr变成这样的map .

如果键类型是某种类似指针的类型,即根据指针的值进行比较,那么最好使用 std::less而不是< ,否则你就有麻烦了。

关于c++ - 使用 nullptr 作为 std::unordered_map 的键有什么后果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59598652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com