c++ pass-by-const-reference

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