C++中的const关键字

1.2k 词

在C++中,const是一个关键字,用于表示常量。

const可以用于修饰变量、函数、指针等。

修饰变量

const修饰变量时,该变量被视为常量,即不能被修改。

对于确定不会被修改的变量,应该加上const,这样可以保证变量的值不会在无意中被修改,也可以使编译器在代码优化时更加智能。

需要注意的时,这里的只读,只是编译器层面的保证,实际中我们可以通过指针在运行程序期间取修改这个变量的值。

例如我们可以对const int*类型的指针,强制转换为int*类型的指针,去掉了const的限制。

在C++中,将const类型的指针强制转换为非const类型的指针被称为类型强制转换,这种行为称为const cast.

实际编程中不要这么用,因为这可能导致崩溃或产生未定义行为。

编译器在处理const变量时,可能生成的代码直接就替换为常量的值,而不是访问常量的命令。

修饰函数参数,表示函数不会修改参数

const修饰函数参数时,表示函数内部不会修改该参数的值。这样可以使代码更加安全,避免在函数内部无意中修改传入的参数值。

尤其是引用作为参数时,如果确定不需要修改引用,一定要加上const.

修饰函数返回值

const修饰函数返回值时,表示函数的返回值为只读,不能被修改。这样做可以使函数返回的值更加安全,避免被误修改。

修饰指针或引用

指向只读变量的指针

const关键字可修饰指针所指示的变量,而非指针本身。

在这种情况下,指针本身可以被修改,但是不能通过指针修改所指向的变量。

1
2
3
4
5
6
const int * p;
int a =10;
const int b =20;
p=&a;
p=&b;
*p=300; // error

我们可以将指针指向普通变量或只读变量,但是无法通过指针修改只读变量的值。

只读指针

const关键字也可以修饰的是指针本身,使得指针本身称为只读变量,此时可以修改指针指向的变量。

1
2
3
4
5
int a=10;
int b=20;
int* const p = &a;
*p=30;
p=&b; //error

只读指针指向只读变量

const关键字也可以同时修饰指针和指针指向的变量,使得指针本身和所指向的变量都成为只读变量。

此时指针本身不能被修改、也不能通过指针修改所指向的变量。

1
2
3
4
const int a = 10;
const int * const p = &a;
*p = 20; //error
p = nullptr; //error

常量引用

常量引用是指引用一个只读变量的引用,因此不能通过常量引用修改变量的值。

修饰成员函数

const修饰成员函数时,表示该函数不会修改对象的状态。

这样有一个好处,const的对象就可以调用这些成员方法了,因为const的对象不允许调用非const的成员方法。

总之,const关键字的作用是为了保证变量的安全性和代码可读性。

留言