C++ const的用法小结

本文详细解释了C++中的const关键字,包括const变量、类对象、不同类型的指针(const变量指针、const指针等),以及const在函数参数、返回值和成员变量/函数中的使用。强调了const如何提升代码正确性和防止意外修改。
摘要由CSDN通过智能技术生成

目录

1. const 变量

2. const 类对象

3. 指向 const 变量的指针

4. const 指针

5. 指向 const 变量的 const 指针

6. 指向 const 变量的指针和 const 指针补充

7. const 变量作为函数参数

8. const 返回值

9. const 成员变量

10. const 成员函数

11. 参考文章


const 是 C++ 中的一个修饰符,就 const 修饰符而言,它用来告诉编译器,被修饰的这些东西,具有“ 只读 ”的特点,在编译中一旦代码试图去改变这些东西,编译器就会给出错误提示,所以使用const,能帮助我们规避很多错误,提高程序正确率

1. const 变量

const 变量:此变量的值是只读的,不能被改变,且在定义时必须初始化。

const int a = 10;
const int b; // 编译错误:未初始化const变量
a = 5; // 编译错误:给只读变量赋值

C++中,const 全局变量被用来替换一般常量宏定义。因为虽然 const 变量的值不能改变,但是依然是变量,使用时依然会进行类型检查,要比宏定义的直接替换方法更严格。

2. const 类对象

const类对象:此类对象的值是只读的,不能被改变。(在C++中, struct 与 class 除了默认访问权限之外,并无本质区别,所以 struct 结构体也同样的)

const Student s1;

改变任何成员变量的值,调用任何非const成员函数都是不允许的

3. 指向 const 变量的指针

指向 const 变量的指针:是一个指向 const 变量的指针,其中保存着一个 const 变量的地址,指针指向的内容不能改变,但是指针的指向可以改变

int a = 10;
const int* b = &a;    //指向变量的值不能改变
int c = 20;
b = &c;               //指针的方向可以改变
cout << *b << endl;    //输出 20

4. const 指针

const指针:一个经 const 修饰的指针,指针指向不能发生改变

int a = 10;
int* const b = &a;    // const 指针必须初始化,且其指向不能改变
*b = 20;              // const 指针指向的内容可以改变
int c = 30;
b = &c;               //报错,不能修改 const 指针的指向

5. 指向 const 变量的 const 指针

指向 const 变量的 const 指针:即 const 指针和指向 const 变量的指针的结合,既不能改变指针的指向,又不能改变指针指向的内容

int a = 10;
const int* const b = &a;    //既不能改变指针的指向,又不能改变指针指向的内容

6. 指向 const 变量的指针和 const 指针补充

const默认先作用于左边的东西,否则作用于右边的东西。只要一个数据类型或者符号就可以判断

  • const int* :左边没有东西,const右边是 int ,代表 int 值(内容)不可变,* 代表指向一个整型。所以不可以改变指针指向的值(内容),但是可以改变指针的指向;
  • int const *:const左边是 int ,代表 int 值(内容)不可变,* 代表指向一个整型,效果同上;
  • int* const:const的左边是 * ,代表指针指向不可变,int 代表指向一个整型的指针。所以不可以改变指针的指向,但是可以改变指针指向的值(内容);
  • const int* const:左边 const 左边没东西,右边是 int ,代表 int 值(内容)不可变,右边 const 左边是 * ,代表指针指向不可变。所以既不可以改变指针指向的值(内容),又不可以改变指针的指向;
  • int const * const:左边 const 左边是 int ,代表 int 值(内容)不可变,右边 const 左边是 * ,代表指针指向不可变。效果同上。

7. const 变量作为函数参数

将函数参数声明为 const 类型,那么函数内部就不能够改变这个参数的值。如果函数的参数是一个指针,一般我们将其设置为指向 const 变量的指针,即不允许函数内部对参数指向的内容进行更改操作。

//值传递
void func(const int a) {
	a = 10;	//编译错误,不允许修改!
	cout << a << endl;
}
//地址传递
void func(const int* a) {
	*a = 10;	//编译错误,不允许修改!
	cout << a << endl;
}
//引用传递
void func(const int& a) {
	a = 10;	//编译错误,不允许修改!
	cout << a << endl;
}

8. const 返回值

const 型的返回值:指的是函数的返回值为一个 const 变量。函数返回const返回值,主要用于函数返回const引用。

引用是一个对象的别名,相当于 const 指针,其指向一经确定,就不能改变了。而 const 引用,则相当于指向 const 变量的 const 指针,其指向和指向的内容均不允许改变。所以在函数返回 const 引用时,不能够通过 函数返回的引用 对实际对象进行任何修改,即便对象本身不是 const 的。

const int& func01(int& a) {
	a = 10;
	return a;
}

int& func02(int& a) {
	a = 10;
	return a;
}

int main() {
	int a = 0;

	//func01(a) = 20;  //编译错误,表达式必须是可修改的左值
	func02(a) = 20;
	cout << a << endl;

	return 0;
}

9. const 成员变量

const 成员变量:指的是类中的成员变量为只读,不能够被修改(包括在类外部和类内部)。

const 成员变量必须被初始化(在相关构造函数的初始化列表中),初始化后,不能够被修改。

静态 const 成员变量需要在类外部单独定义并初始化(可定义在头文件)

10. const 成员函数

const成员函数:此函数不应该修改任何成员变量。

传给const成员函数的this指针,是指向 const 对象 的 const 指针。

const成员函数,不能够修改任何成员变量,除非成员变量被 mutable 修饰符修饰。

11. 参考文章

C/C++ 基础中的基础: const 修饰符用法总结! - 知乎

C++里 const int* 与 int const* 有什么区别? - 知乎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值