繁体   English   中英

c ++传递const引用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM