【发布时间】:2012-06-14 03:46:28
【问题描述】:
在下面的程序体中包含一个指针向量。 Points 是 x,y,z 坐标和 point_id 的结构。我相信由于 body 是通过 const 引用传递的,因此以下步骤应该会产生错误。但是程序运行没有任何问题。你能解释一下为什么会这样吗?
void readOutFile(const Body& body, int n){
....
body.bp[0]->points.push_back(Point_id(p,i));
}
【问题讨论】:
-
body作为const传递,但编译器无法知道body.bp[0]->points也应该是const。 -
它会运行正常,而 const 错误将是编译时错误,而不是运行时错误。
-
在 C++ 中,const 是浅的,而不是深的。所以它影响对象但不影响它的关联。这意味着您只能调用 const 方法。但是 const 方法可以改变其他对象,总是使用接口中的方法,并使用一个好的 lint 工具来检查深层 const。
-
@richard const is shallow 是什么意思?是否有概念:浅常量和深常量?
-
深浅常量,就像深浅拷贝。浅是指单独的对象。深指对象及其所指的所有对象。 IE。浅 const 集合/对象是变体对象的不变集合/对象。深 const 集合/对象是深 const 对象的不变集合/对象。 (注意递归定义)。还要注意,如果一个对象是深常量,它将通过浅常量测试。 (副本不是这样)
标签: c++ pass-by-const-reference