Why does std::set.insert() return a non-const iterator, and yet I cannot modify it?

后端 未结 2 601
广开言路
广开言路 2021-02-04 08:55

Consider this code example:

#include 
#include 

using namespace std;

set string_set;

void foo(const string& a)
{
           


        
2条回答
  •  悲&欢浪女
    2021-02-04 09:40

    Because according to the standard, modifications through a set<>::iterator are not allowed. The standard specifically allows set<>::iterator and set<>::const_iterator to be the same type. And although it doesn't require them to be the same type, it does require the value_type of set<>::iterator to be const.

    The reason for this, of course, is that any modifications to the value could invalidate the invariants of std::set<>.

提交回复
热议问题