gpt4 book ai didi

c++ - 为什么以这种方式使用迭代器有效?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:09:28 24 4
gpt4 key购买 nike

这是一个最小的代码,用于重新创建让我怀疑的条件:

#include <map>
#include <string>

int main()
{
std::map<std::string, std::string> mm;

mm.emplace("Hi", "asd");
mm.emplace("Hey", "asd");
mm.emplace("Hello", "asd");

std::map<std::string, std::string>::const_iterator it = mm.find("Hey");
it->second.size();

// A
//it->second.replace(0,1,"h");

//B
auto u = it->second;
u.replace(0,1,"h");
}

为什么在 A 情况下将常量作为参数传递会出错,但在 B 情况下却有效?

错误详情:

error: passing 'const std::basic_string' as 'this' argument of 'std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::replace(std::basic_string<_CharT, _Traits, _Alloc>::size_type, std::basic_string<_CharT, _Traits, _Alloc>::size_type, const _CharT*) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator; std::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]' discards qualifiers [-fpermissive]

最佳答案

原因很简单:it 是一个const 迭代器,所以it->second 是一个const std::string 并且您不能在其上调用非常量方法。

当你处理:

auto u = it->second;

auto 推导为 std::string 并且 uit->second 初始化。由于 u 是非常量 std::string,您可以自由调用 const 和非常量方法。

关于c++ - 为什么以这种方式使用迭代器有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45191035/

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