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

标签 c++

我想知道返回指针的函数是否有任何理由不应该是常量。我正在处理一些在大多数地方似乎是 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/

相关文章:

c++ - 链接 tesseract 库

c++ - 在不使用指针的情况下,在 C++ 中返回 'Invalid Value' 类型的正确方法是什么?

c++ - 如何以编程方式查找加载的共享库的版本?

c++ - 获取回调函数的返回类型

c++ - 以 C++ 元编程风格实现 RLE 算法

c++ - libmysqlclient.a 和 libmysqlclient_r.a 有什么区别?

C++读取csv文件并将值分配给数组

c++ - 谷歌测试检查 float 不等于

c++ - 链表没有正确循环

c++ - 是否允许限定函数类型作为模板参数 (C++98)