c++ pasando por referencia const
pass-by-const-reference (4)
En el siguiente programa del cuerpo cosistas de un vector de punteros. Puntos es una estructura de coordenadas x, y, z y un point_id. Creo que a medida que el cuerpo se pasa por referencia constante, el siguiente paso debería producir un error. BUt el programa se está ejecutando sin ningún problema. ¿Me puede explicar por qué es esto?
void readOutFile(const Body& body, int n){
....
body.bp[0]->points.push_back(Point_id(p,i));
}
Aquí está el problema:
body.bp[0]->points.push_back(Point_id(p,i));
^^
El direccionamiento a través de un puntero elimina cualquier constancia; más bien, la constancia del resultado depende del tipo de puntero.
T *t; // pointer to T: can modify t and (*t)
const T *t; // pointer to const-T: can modify t but not (*t)
T *const t; // const-pointer to T: can modify (*t) but not t
const T *const t; // const-pointer to const-T: can''t modify either t or (*t)
Este es uno de los mejores ejemplos que muestra por qué data members should not be public
.
aquí, el body
es constante, por lo tanto, sus miembros de datos no deben cambiarse, pero en body.bp[0]->points
se están modificando, lo que no es el miembro de Body
.
Sí, el body
es constante. Eso significa que no se pueden llamar funciones miembro que no sean const, y que no se pueden modificar las variables miembro.
Tampoco se está haciendo. El único miembro del body
utilizado es body.bp[0]
, que tampoco se cambia, sino que se usa simplemente para obtener points
, que pueden ser constantes o no ...
Corrolario: No hacer públicos los datos de los miembros.
Sólo el body
es constante.
body.bp[0]->points
no se ven afectados por la constancia del body