为什么 std::map::merge 的源 std::map 不是 const?

Bat*_*eba 5 c++ c++17

有没有理由

template<class C2>
void std::map<Key,T,Compare,Allocator>::merge( std::map<Key, T, C2, Allocator>& source );
Run Code Online (Sandbox Code Playgroud)

当作source参考,而不是参考const

也许我在这里度过了一个高级时刻,但我不知道source该功能如何以任何方式改变,而且它的帮助不大。

Sam*_*hik 6

merge()事实上,它修改了源映射。这是一种优化的操作,通过重新链接两个映射的内部结构来执行合并,将合并的值从一个映射移植到另一个映射,而无需实际复制键或值,仅通过摆弄内部指针来执行合并。

因此,最终,源地图(通常)将只是其昔日辉煌的影子。const但这种事不可能发生。