El vector STL plantilla define accessors elemento como tanto const y variantes no constante, por ejemplo:const y no const en contenedores STL
reference operator[](size_type __n)
{return *(this->_M_impl._M_start + __n);}
const_reference operator[](size_type __n) const
{return *(this->_M_impl._M_start + __n);}
¿Cuándo el compilador decide utilizar una versión sobre el otro? El vector en sí no se define como const, ni los elementos están almacenados en él. Así que dado dos funciones:
A f(int i) const
{ return myVector[i]; }
A f(int i)
{ return myVector[i]; }
Mi entendimiento es que el primero sería llamar a la versión const del operador [] y devolver una constante A. El segundo llama a la versión no constante y devuelve un no constante A?
Para mí, la primera versión de f() parece ser la "correcta" para escribir, ya que la función no está alterando nada, pero tal vez sea sorprendente para la persona que llama que devuelve una const A. Sin duda, si yo quería un const un regresó, yo debería necesitar definir f() como:
const A f(int i) const //Note the extra const at the start
{ return myVector[i]; }
¿Qué le diría a todo el que está escribiendo la persona que llama a esperar un const espalda.
¿Entonces la const extra aparece por arte de magia? ¿Y a qué se aplica el const extra si uso un boost :: ptr_vector en lugar de std :: vector? ¿Los datos? El puntero? ¿ambos?
Sería mejor que hicieras una pregunta general sobre 'const'. Y aún mejor, estudia esto en tu libro de texto C++ y probando programas de ejemplo, y luego preguntando sobre cualquier problema concreto. ¿Qué libro de texto estás usando? –