函数中的C ++ const关键字

时间:2012-04-22 07:35:26

标签: c++ function const

我理解使用时如下:

int getX() const {...} 

表示此函数不会修改其正文中使用的任何变量。但是我没有取消使用的是在2个地方使用const,如下所示:

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

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

1 个答案:

答案 0 :(得分:5)

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

int getX() const { ... }

是一个成员函数,它不能修改任何数据成员或为具有该函数的类的给定实例调用任何非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