Hasty Briefsbeta

双语

Map: Operator[] Should Be Nodiscard

5 months ago
  • #nodiscard
  • #C++
  • #STL
  • libc++和微软STL一直在为函数添加[[nodiscard]]属性,但存在例外情况,例如unique_ptr::release函数。
  • map::operator[]在libc++中曾被标记为[[nodiscard]],但由于在Chromium和flatbuffers等代码库中的广泛使用,这一改动被撤销。
  • 惯用法'mymap[key];'常用于产生副作用,但这种写法不够清晰,可以用mymap.try_emplace(key)或(void)mymap[key];来替代以提高代码可读性。
  • 微软STL和libc++为array、deque和vector的operator[]标记了[[nodiscard]],但考虑到现有使用模式,未对map::operator[]进行标记。
  • LLVM内部容器(如DenseMap、MapVector和StringMap)尚未将operator[]标记为[[nodiscard]],但只需少量修改即可实现。
  • 建议:用m.try_emplace(k)或(void)m[k];替代'm[k];'写法,以提升代码清晰度和可维护性。