web-dev-qa-db-ja.com

新しいstd :: map :: Erase()署名C ++ 17

この回答 によると、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_を受け取るのに十分ではありませんでしたか?

29
João Paulo

iteratorを渡すと、erase(const key_type& key)にあいまいさが生じる可能性があります。 key_typestd::anyのようなものである場合を考えてみましょう。

26
T.C.