在C++中,const
是一个关键字,用于表示常量。
const
可以用于修饰变量、函数、指针等。
修饰变量
当const
修饰变量时,该变量被视为常量,即不能被修改。
对于确定不会被修改的变量,应该加上const
,这样可以保证变量的值不会在无意中被修改,也可以使编译器在代码优化时更加智能。
需要注意的时,这里的只读,只是编译器层面的保证,实际中我们可以通过指针在运行程序期间取修改这个变量的值。
例如我们可以对const int*
类型的指针,强制转换为int*
类型的指针,去掉了const
的限制。
在C++中,将const
类型的指针强制转换为非const
类型的指针被称为类型强制转换,这种行为称为const cast
.
实际编程中不要这么用,因为这可能导致崩溃或产生未定义行为。
编译器在处理const变量时,可能生成的代码直接就替换为常量的值,而不是访问常量的命令。
修饰函数参数,表示函数不会修改参数
当const
修饰函数参数时,表示函数内部不会修改该参数的值。这样可以使代码更加安全,避免在函数内部无意中修改传入的参数值。
尤其是引用作为参数时,如果确定不需要修改引用,一定要加上const
.
修饰函数返回值
当const
修饰函数返回值时,表示函数的返回值为只读,不能被修改。这样做可以使函数返回的值更加安全,避免被误修改。
修饰指针或引用
指向只读变量的指针
const
关键字可修饰指针所指示的变量,而非指针本身。
在这种情况下,指针本身可以被修改,但是不能通过指针修改所指向的变量。
1 |
|
我们可以将指针指向普通变量或只读变量,但是无法通过指针修改只读变量的值。
只读指针
const
关键字也可以修饰的是指针本身,使得指针本身称为只读变量,此时可以修改指针指向的变量。
1 |
|
只读指针指向只读变量
const
关键字也可以同时修饰指针和指针指向的变量,使得指针本身和所指向的变量都成为只读变量。
此时指针本身不能被修改、也不能通过指针修改所指向的变量。
1 |
|
常量引用
常量引用是指引用一个只读变量的引用,因此不能通过常量引用修改变量的值。
修饰成员函数
当const
修饰成员函数时,表示该函数不会修改对象的状态。
这样有一个好处,const的对象就可以调用这些成员方法了,因为const的对象不允许调用非const的成员方法。