[英]c++ passing by const reference
在下面的程序体中指向矢量的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));
}
这是问题所在:
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)
这是一个最好的例子,它说明了为什么data members should not be public
。
这里, body
是常量因此它的数据成员不能被改变,但是在body.bp[0]->points
点被改变,这不是Body
的成员.Hence没有const违规。
只有body
是恒定的。
body.bp[0]->points
不受body
恒定性的影响
是的, body
是恒定的。 这意味着不能调用非const成员函数,也不能修改成员变量。
两者都没有完成。 使用的唯一body
成员是body.bp[0]
,它也没有改变,但仅用于得到points
,这可能是也可能不是常数......
证据:不要公开数据成员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.