In the following program body cosists of a vector of pointers. Points is a struct of x,y,z coordinates and a point_id. I believe as body is passed by const reference, the fo
Yes, body
is constant. That means that no non-const member functions may be called, and no member variables be modified.
Neither is being done. The only member of body
used is body.bp[0]
, which is not changed either, but merely used to get at points
, which might or might not be constant...
Corrolary: Don't make data members public.
This is one of best example which shows why data members should not be public
.
here, body
is constant hence its data members must not be changed, but in body.bp[0]->points
point is being changed which is not the member of Body
.Hence no const violation.
Only body
is constant.
body.bp[0]->points
is no way affected by the constantness of body
Here's the issue:
body.bp[0]->points.push_back(Point_id(p,i));
^^
Indirecting through a pointer removes any constness; rather, the constness of the result is dependent on the type of the pointer.
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)