一、修饰普通变量

const double PI = 3.14159;
const int a = 10;//这些C++中的内置类型被const修饰时,其值不可被随意更改

二、修饰一个指针(即指针对应的值不可修改)

但是指针作为一个变量,其可指向其他位置,只是无法通过指针来改变其指向的对象的值

int a = 10;
int b = 20;
const int* p = &a;
*p = 20;//这条语句是存在语法错误的,因为其改变了指针对应的对象的值
//但是存在一种方法能够修改该对象的值const_cast
//但由于它可能引发未定义行为,所以并不推荐使用
const int* const_b = &b;
int* change_b=const_cast<int*>(const_b);
*change_b = 10;
std::cout<<*change_b;//打印结果是修改后的值,即b = 10;
//注意调用const_cast时需保证其类型为指针、引用或指向对象类型成员的指针(对象类成员即类或结构体的成员变量或成员函数)

三、修饰指针变量

不同于第二点,这里的指针变量即指针指向的地址是不可更改的,但是指针指向的对象的值是可以更改的,故可以通过指针来修改对象的值:

int a = 20;
int b = 10;
int* const p = &a;
p = &b;//该行为会导致错误
*p = 1;//正确,将a的值改为1;
std::cout<<a;//打印结果为1;

四:既修饰指针变量,又修饰指针类型

第四点即将第二、三点结合即可,表示指针本身及其对应的对象均不可修改

int a = 10;
int b = 20;
const int* const p = &a;
p = &b;
*p = 1;//两种操作均会报错

五:修饰函数的参数

表示该参数不可更改:

void print(const int a){
	a = 6;//错误,a为不可修改的值
  std::cout<< a <<std::endl;
}

六:修饰函数的返回值

同上面几点,只不过是将const修饰的值变成了函数的返回值

const int fun1();//同第一点
const int* func2();//同第二点
int* const func3();//同第三点

七:修饰类中的成员函数

其基本作用就是限制函数对其内部对象的修改(类的内部)

class print {
private:
	int a;
	int b;
public:
	int get_value() const {
		return a;
	}
};
//这里我定义了一个print类,其中包含私有成员a和b
//同时又定义了一个const成员函数,用以返回a的值,这里const的作用就是防止函数对类中成员a的错误更改