函数中的 C++ const 关键字

标签 c++ function constants

我在使用时的理解如下:

int getX() const {...} 

表示此函数不会修改其主体中使用的任何变量。但我没有理解的是在 2 个地方使用了 const,如下所示:

const int* getX () const {...}

const关键字放在int*之前有什么用?

最佳答案

你的第一个解释是错误的。

int getX() const { ... }

是一个成员函数,它不能修改任何数据成员,也不能为具有该函数的类的给定实例调用任何非常量。

const int* getX() const { ... }

返回一个 const int*,因此它限制了您可以分配给使用它的内容。它是一个指向 const int 的非 const 指针,因此您不能修改它指向的 int,但可以修改指针本身。例如:

const int* i = someInstange.getX(); // getX() returns const int*
i = someOtherFunction(); // another function returning const int*. OK to reassign i.

所以 i 本身不是 const,但它指向的是:

(*i)++; // ERROR!

如果你想返回一个const pointer to const int你需要这样的东西:

const int * const getX() {}

整个问题更加复杂,因为您可以将第一个 const 放在不同的地方而不会改变其含义。有关这方面的更多信息,请查看 this SO question .

关于函数中的 C++ const 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10266095/

相关文章:

javascript - Google Apps 脚本重新声明 Const 错误

javascript - 在 page.evaluate() 中声明为 const 的变量未在 PhantomJS 中使用

c++ - 如何将较大的数组缩小为较小的数组?

c++ - 实现 operator[]/iterator 来处理性能问题的方法是什么?

c++ - 如何使用带有多个定界符的 istringstream

c - 简单函数 C 中的时间限制超出错误

c++ - 我如何使用 GLADcallback?

function - 在 Dart 中定义函数时,如何将参数的默认值设置为 { },即空 Map?

jquery - Jquery 中的函数传递表单元素的 ID 作为参数

c - 为长值显式声明 L 或 UL 的原因是什么