函数中的C++ const关键字

hak*_*ata 2 c++ const function

我明白使用时如下:

int getX() const {...} 
Run Code Online (Sandbox Code Playgroud)

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

const int* getX () const {...}
Run Code Online (Sandbox Code Playgroud)

const关键字放在之前的用途是什么int*

jua*_*nza 5

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

int getX() const { ... }
Run Code Online (Sandbox Code Playgroud)

是一个成员函数,它不能修改任何数据成员或调用具有该函数的类的给定实例的任何非const.

const int* getX() const { ... }
Run Code Online (Sandbox Code Playgroud)

返回a 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.
Run Code Online (Sandbox Code Playgroud)

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

(*i)++; // ERROR!
Run Code Online (Sandbox Code Playgroud)

如果你想返回一个const指针到const int你需要这样的东西:

const int * const getX() {}
Run Code Online (Sandbox Code Playgroud)

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