【问题标题】:C++ const keyword in functions函数中的 C++ const 关键字
【发布时间】:2012-04-22 07:35:26
【问题描述】:

使用时理解如下:

int getX() const {...} 

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

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

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

【问题讨论】:

  • 最后一个简单地表示该函数返回一个const int*作为结果类型。和int const*一样。

标签: c++ function constants


【解决方案1】:

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

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 指向 const int 的指针,你需要这样的东西:

const int * const getX() {}

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

【讨论】:

  • 所以这只是意味着返回是 const,我必须把它放在一个 const 变量中?
  • 没错;如果您尝试将结果分配给 int*,则会收到错误消息。
  • @aizen92 有点微妙。指针本身不是 const,因此您可以为其分配其他内容。什么是 const 是指针所指向的。我已经编辑了我的答案以反映这一点。
  • @aizen92 我在答案中添加了更多信息,以及一个有用的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
相关资源
最近更新 更多