通过访问器函数使用重载的operator[]

2024-04-14

我有一个访问器函数,它返回对类型 (std::map) 的 const 引用......

myMap_t const& getMap() const {return paramMap;} 

该类型有一个重载[]操作员。然后使用的语法是什么[]直接从 getter 函数获取操作符,如下所示,但这实际上是有效的。

parameter = contextObj.getMap()[key];

错误信息是:

context.cpp:35: error: passing   
  'const std::map<
     std::basic_string<char, std::char_traits<char>, std::allocator<char> >, 
     float, 
     std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, 
     std::allocator<std::pair<
       const std::basic_string<char, std::char_traits<char>, std::allocator<char> >,
       float> > >'
as 'this' argument of 
  '_Tp& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&)  
with 
  _Key = std::basic_string<char, std::char_traits<char>, std::allocator<char> >,
  _Tp = float, 
  _Compare = std::less<std::basic_string<char, std::char_traits<char>,  td::allocator<char> > >, 
  _Alloc = std::allocator<std::pair<
    const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, 
    float> >]' 
discards qualifiers

问题是operator[]在映射中是一个变异操作,您不能在映射的 const 引用上调用它。它发生变化的原因是它必须返回对值的引用,为此,如果容器中尚不存在该键,它将插入一个由该键寻址的新的默认构造值并返回对该值的引用。

如果您有一个 const 引用,并且想要确定某个元素是否存在(或访问它),则必须使用std::map<>::find这将返回一个迭代器。如果该元素不存在,则迭代器的值将为m.end()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过访问器函数使用重载的operator[] 的相关文章

随机推荐