我想知道返回指针的函数是否有任何理由不应该是常量。我正在处理一些在大多数地方似乎是 const 正确的代码,但由于某种原因没有将返回指针的函数声明为 const。例如,它写
virtual Joint* getJointByID(unsigned int id);
代替
virtual Joint* getJointByID(unsigned int id) const;
如果 getJointByID 函数本身实际上没有更改类的任何成员,那么有什么理由不应该存在 const 吗?
最佳答案
这实际上是有道理的。如果函数要用 const
声明,则意味着它可以用于常量实例 (constvar.getJointByID...)。但是,如果它返回一个指向随后可以修改的内部结构的指针,它将允许用户绕过实例的 const 限制。
当没有用 const
声明时(就像现在这样),您不能在 const 实例上调用该函数,因此常量性得以保留。如果它被声明为 const
,它最好返回一个 const Joint*
。
(我在这里假设 Joint* 确实是类数据结构的一部分。如果类返回某个 Joint
左右的新分配拷贝,那么它不是常量。这取决于实现)
关于C++:函数返回指针不应该是 const 的任何原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6744950/