for (Something something : setOfSomething) // OK
for (Something const& something : setOfSomething) // OK
for (Something& something : setOfSomething) // ERROR
error: invalid initialization of reference of type 'Something&'
from expression of type 'const Something'
¿Desde cuándo el iterador devuelve const Something
? Debería devolver Something&
o Something const&
. Y dado que el bucle 'for' basado en el rango se interpreta como that, no tengo una explicación plausible de lo que está sucediendo.Adquirir la referencia a un elemento de un contenedor STL en un ciclo 'for' basado en el rango C++ 11
Edit: Estoy hablando de unordered_set
en lugar de set
, disculpa esta confusión.
Qué tipo de invariantes se pueden romper si modifico MI objeto. La ubicación y el tamaño de la memoria que ocupa permanece intacta, y estas dos cosas son las únicas que se supone que 'set' debe controlar. Además, ¿qué pasa si tengo mi propio contenedor? ¿Por qué el compilador impondría este tipo de restricción en mis contenedores? Para ser honesto, parece un truco sucio. –
El orden de los objetos en el 'conjunto 'podría cambiarse si actualizas partes de tu objeto en comparación con la comparación del' conjunto'. Si este problema está sucediendo con un contenedor que no sea 'std :: set' o cualquiera de sus parientes (multi, desordenado, etc.), ¿podría editar los detalles y más código en su pregunta? –
Es mi problema entonces, entonces soy un idiota, pero no es asunto del compilador. Además, aún puedo modificarlo dentro de un bucle de iterador antiguo. –