C++:函数返回指针不应该是const的任何原因?

Gra*_*ity 4 c++

我想知道返回指针的函数是否应该是const是否有任何原因.我正在研究一些在大多数地方似乎是const-correct的代码,但由于某种原因,并没有声明函数将指针返回为const.例如,它写道

virtual Joint* getJointByID(unsigned int id);
Run Code Online (Sandbox Code Playgroud)

代替

virtual Joint* getJointByID(unsigned int id) const;
Run Code Online (Sandbox Code Playgroud)

如果getJointByID函数本身实际上并没有改变该类的任何成员,那么const是否应该存在?

era*_*ran 7

这实际上是有道理的.如果要使用const它声明函数,则意味着它可以在常量实例(constvar.getJointByID ...)上使用.但是如果它返回一个指向内部结构的指针然后可以修改它,它将允许用户绕过实例的const限制.

如果没有声明const(就像它一样),则无法在const实例上调用该函数,因此保留了const.如果它已经宣布const,它应该最好返回一个const Joint*.

(我在这里假设Joint*确实是类数据结构的一部分.如果类返回一个左右的新分配的副本,Joint那么它不能保持不变.这取决于实现)