c ++传递const引用

时间:2012-06-11 08:31:29

标签: c++ pass-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));
}

4 个答案:

答案 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:不要公开数据成员。