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 following step should produce an error. BUt the program is running without any problem. Can you please explain me why is this.
void readOutFile(const Body& body, int n){
....
body.bp[0]->points.push_back(Point_id(p,i));
}
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 inbody.bp[0]->points
point is being changed which is not the member ofBody
.Hence no const violation.Here's the issue:
Indirecting through a pointer removes any constness; rather, the constness of the result is dependent on the type of the pointer.
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 isbody.bp[0]
, which is not changed either, but merely used to get atpoints
, which might or might not be constant...Corrolary: Don't make data members public.
Only
body
is constant.body.bp[0]->points
is no way affected by the constantness ofbody