gpt4 book ai didi

c++ - 为什么我不能将 const 映射结构传递给 C++ 中的函数?

转载 作者:可可西里 更新时间:2023-11-01 15:36:12 25 4
gpt4 key购买 nike

我尝试将 const 与 vector 一起工作:例如:

void damn(const vector <bool> &bb)
{
for (int i=0; i<bb.size(); i++)
cout<<bb[i]<<endl;

}

但是当尝试使用 map 时,它不会:

void pas(const map <string, float> &mm)
{
cout<<mm["a"];
cout<<mm["b"];
}

我想知道为什么没有。

最佳答案

map::operator[] 有点奇怪。它这样做:

  1. 寻找 key 。
  2. 如果找到,归还。
  3. 如果不是,则插入并默认构造其关联值。
  4. 然后返回对新值的引用。

第 3 步与 constness 不兼容。该语言没有两个功能不同的 operator[] 重载,而是强制您对 const 对象使用 map::find

或者,有人可能会争辩说,如果参数不在 map 中,map::operator[] const 会做什么?抛出异常?未定义的行为? (毕竟,这就是 vector::operator[] 对索引越界所做的事情。)无论如何,这个问题是可以避免的,只会给我们带来一点不便。

my_map.find(key) 如果未找到 key,则返回 my_map.end()

关于c++ - 为什么我不能将 const 映射结构传递给 C++ 中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2752549/

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