一、C++的const关键字
这里可以分为两种情况:
一种是类似与C语言里面的 const char*
,char* const
;
一种是C++用于类里面限定函数的。
-
const int*
// const关键字
const int MAX_AGE = 100;
const int* a = &MAX_AGE; //不可以改变a指针指向的值,但可以改变a指针的指向。
// *a = 100; 这个操作是不允许的。
a = nullptr; //这个可以,可以改变a的指向。
-
int const*
int* const b = new int(10); // 不可以改变b指针的指向,但可以改变b指针指向的值。
// b = nullptr; 这个操作是不允许的。
*b = 20; //这个可以,可以改变a指向的值。
cout << *b << endl; // 20
二、const在类中的含义
Entity类中有两个私有元素:m_X, m_Y,类型分别为int, int*
然后是一个getX()方法返回m_X,一个getY()方法返回m_Y。
int getX() const {return m_X;}
,加了const表示这个方法不能改变这个类(即只能读不能写)。
如果我标记了一个类方法为const,但我还想他能改变这个类,那么我可以设置要改变的属性为mutable,如下所示:mutable int var
;
// const在类中的使用
class Entity{
private:
int m_X, *m_Y;
mutable int var; // mutable
public:
Entity(int x, int* y) : m_X(x), m_Y(y){}
int getX() const // 此处const的作用就是说明此方法不会改变这个类对象。如果在其中改变m_X的值则会报错。
{
// m_X = 5; 不可以
return m_X;
}
const int* getY() const // 表示返回一个指向的值不能改变的指针,同时这个方法也不会改变类对象。
{
return m_Y;
}
// 假如我设定了一个方法为const(即不会改变类对象),但我又想让它能类对象,这是可以设置要改变的类属性为mutable.
void test() const
{
var = 100;
cout << var << endl;
}
};
int main() {
Entity e = Entity(3, new int(10));
cout << e.getX() << endl;
const int* cptr = e.getY();
cout << *cptr << endl;
// *e.getY() = 20; 这个操作不行,因为已经限定了e.getY()返回的是一个const int*,指针指向的内容不能改变。
e.test();
return 0;