gpt4 book ai didi

C++ 空映射赋值 : equals vs insert

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:47:12 25 4
gpt4 key购买 nike

我有一个工作的 friend 鼓励我永远不要将键/值对分配到如下所示的空映射中:

int somefunc(map<int, int> somemap) {
somemap.clear();
somemap[12] = 42;
}

他说既然somemap的map变量被清除了,那么somemap[12]就是一个无效的访问。我推断没有 C++ 编译器,即使在 Debug模式下编译,也不会生成不必要地尝试访问上面赋值中的 somemap[12] 的程序集。上面的最后一行总是会被编译成与这一行相同的程序集:

somemap.insert(std::pair(12,42));

这是真的吗?是否有任何理由通过插入与早期方法进行分配?我更喜欢早一点,因为它更短。

最佳答案

是的,最后一行总是插入一个元素,如果它不存在的话。

来自 section 23.4.4.3 of the C++ standard :

T& operator[](const key_type& x);
  1. Effects: If there is no key equivalent to x in the map, inserts value_type(x, T()) into the map.

map::[] operator定义为:

Returns a reference to the value that is mapped to a key equivalent to key, performing an insertion if such key does not already exist.

关于C++ 空映射赋值 : equals vs insert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20574035/

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