关于const的那些事
程序员文章站
2022-05-06 18:19:27
...
最近在通过 C++ Primer 这本书复习C++。在看到const这一节中,看到了很多容易混淆的几个点,因此记录下来。
为什么使用const
在程序中,如果经常用到一个数字,那么就可以将它定义为一个变量,这样,在改变一个数字的时候,就只需要改变这个变量的值就好了,这样在使用次数很多的时候,会大大减小工作量。
但是在程序中,很容易就造成该变量的数值变化了,而且有些是很不容易发现的错误。
就像是
#include <iostream>
using namespace std;
int main() {
int a = 1024;
if (a = 1) { // 在这里,就对 a 的值进行了修改,而且是很不容易发现的错误
// ...
}
return 0;
}
所以,此时就需要 const 类型的变量。
所谓 const 类型的变量,是指的在C++中,const 关键词告诉编译器,这个变量的值是不变的,不能对其进行修改,也就是我们常说的 Read-Only 类型的变量。
const的定义方法
在定义 const 变量的时候,因为常量在定义后不能对其值进行修改,所以,在定义的时候,一定要进行初始化。例如
const int a = 1024;
const在指针中的应用
在实际中,指向常量的指针,往往被用于函数参数
一、
试图将一个非 const 对象的指针指向一个常量对象,会引起编译错误。
const double a = 10;
double *p = &a; // Error.
二、const double *p;
定义一个指向 double 类型的 const 对象的指针,可以从右向左理解,p
是一个指向 double 类型的、被定义为 const 类型 的指针。我们可以对其进行重新赋值,使其指向不同的对象,但是不能改变 p
指向的对象的数据。
#include <iostream>
using namespace std;
int main() {
double a = 10, b = 12;
const double *p = &a;
*p = 11; // Error.
p = &b; // OK.
return 0;
}
三、int *const p = &a;
定义一个指向非 const 对象的 const 指针,可以从右向左理解,p
是一个指向 int 类型对象的 const 指针。它不能指向 const int
类型的对象。