C++ const详解

一、const 修饰变量

1. const 修饰指针变量时:

1.1 只有一个const时,如果const 位于 * 的左侧:(和int 位置无关) 表示指针所指的数据是常量,不能通 过该指针修改实际数据,但是可以外部修改内存数据;指针本身是变量,可以指向其他的内存单元

	int num = 1024;
	const int num1 = num;		//合法
	//num1 = 100;		//不合法

	const int *ptrNum = #	//等价 int const *ptrNum_1 = #
	int const *ptrNum_1 = #
	ptrNum = &num1;		//合法
	ptrNum_1 = &num1;		//合法

	//*ptrNum = 10;		//不合法
	//*ptrNum_1 = 10;		//不合法

1.2 只有一个const时,如果const位于 * 的右侧:表示指针本身是常量,不能指向其他的内存单元,所 指向的数据可以修改

	int * const ptrNum3 = #	//定义的时候必须初始化
	//ptrNum3 = ptrNum;		//不合法
	*ptrNum3 = 11;		//合法

1.3 如果有两个const 位于 * 的左右两侧,表示指针和指针所指向的数据都不能通过该指针改变

二、const 修饰引用

不能通过该引用修改变量的的值(const 常量),但是外部可以修改变量的值。

void Test(const int num)
{
	//num = 123  //传递过来的参数num在函数体内不可改变
}
void Test(const Student &stu)
{
	//const成员函数不能调用非const成员函数
	//const修饰引用时,不能修改对象的任何成员
}

三、const修饰返回值

void Show() const {}
void Test(const Student& stu)
{
	stu.Show();		//此时函数应该加const 修饰,否则报错
	//如果函数要返回局部对象,就应该直接返回这个对象,而不要返回对象对的引用
	//在可以返回对象,也可以返回引用时,就应该首选引用,因为效率高
}

四、成员函数末尾加const

  1. 说明这个成员函数不会修改该对象成员变量的值(注意:不但要在成员函数声明中加 const,在函数定义中也要加const修饰,否则编译报错)。
void GetName() const{}

注意:

  1. const 修饰的对象,只能调用const 修饰的成员函数,不能调用非const成员函数,非 const 修饰的对象,const和非const修饰的成员函数都可以调用。
    const 不能放到普通函数末尾修饰。

五、mutable修饰成员变量

一个成员变量一旦被mutable修饰了,就表示,这个成员变量永远处于可以被修改状态,即便在 const 结尾的成员函数中,也可以被修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值