c++ passing by const reference

前端 未结 4 2053
独厮守ぢ
独厮守ぢ 2021-01-07 19:23

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

相关标签:
4条回答
  • 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.

    0 讨论(0)
  • 2021-01-07 19:26

    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.

    0 讨论(0)
  • 2021-01-07 19:28

    Only body is constant.

    body.bp[0]->points is no way affected by the constantness of body

    0 讨论(0)
  • 2021-01-07 19:31

    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)
    
    0 讨论(0)
提交回复
热议问题