在以下程序体中指针向量的cosist。点是x,y,z坐标和point_id的结构。我相信当body通过const引用传递时,下面的步骤应该产生错误。 BUt程序运行没有任何问题。你能解释一下这是为什么吗?
void readOutFile(const Body& body, int n){
....
body.bp[0]->points.push_back(Point_id(p,i));
}
答案 0 :(得分:39)
问题在于:
body.bp[0]->points.push_back(Point_id(p,i));
^^
指向通过指针删除任何常量;相反,结果的常量取决于指针的类型。
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)
答案 1 :(得分:16)
这是显示data members should not be public
原因的最佳示例之一。
这里,body
是常量,因此不能更改其数据成员,但是body.bp[0]->points
点正在更改,而不是Body
的成员。因此没有const违规。< / p>
答案 2 :(得分:6)
只有body
不变。
body.bp[0]->points
不受[{1}}
答案 3 :(得分:6)
是的,body
是不变的。这意味着不能调用非const成员函数,也不能修改成员变量。
两者都没有完成。 body
使用的唯一成员是body.bp[0]
,它也没有改变,但仅用于获取points
,这可能是也可能不是...... {/ p>
Corrolary:不要公开数据成员。