Это потому, что каждый элемент std::set
хранится как T const
, и реализация имеет причину для этого.
Поскольку std::set
содержит ровно одну копию значения. Он должен сделать его неизменным , иначе можно изменить его значение на то, что уже существует в наборе.
Даже если бы элементы были mutable , вы не смогли бы изменить значение, потому что std::set::find
является const
функцией-членом, и поэтому в этой функции intSet
равно неизменный , и фактически каждый элемент станет неизменным , включая итератор , который он возвращает, и через который вы можете изменить значение при вызове -site.
Единственный, кто хочет получить адрес, это:
int const *paddress = &(*(intSet.find(4))); //const int* is same as int const*
Не используйте const_cast
хотя,
//DANGEROUS - DONT DO IT
int *paddress = const_cast<int*>(&(*(intSet.find(4)))); //will compile,
//but it is dangerous!
//you might accidentally write
*paddress = 10; //undefined behaviour,
//though the compiler will let you write this