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];'写法,以提升代码清晰度和可维护性。