根据这个答案,iterator
必须隐式转换为const_iterator
。既然这是真的,正如我们在insert_or_assign()
中看到的那样,那么为什么在 C++17 年向std::map::erase()
添加了一个新的签名?
在C++11中,我们有iterator erase( const_iterator pos );
在C++17,我们现在有iterator erase( iterator pos );
C++11签名还不够好,可以接受iterator
和const_iterator
吗?
当您通过iterator
时,erase(const key_type& key)
可能存在歧义。考虑一下key_type
类似于std::any
的情况。