C++知识积累:const修饰符总结

const是特别容易弄混的一点,现在以int和const来说,它的使用方式一般有以下几种:
int const、const int 、
int const* 、const int*、int * const、const int* const、int const * const
int const &、const int &

int const 、const int

int const 和const int是等价的,定义int const a;那么a的值是不能改变的,可以用变量对其进行初始化,一旦初始化后,a的值就不能再变了,如下:
在这里插入图片描述在这里插入图片描述
由图可知,int const a或const int b与int a或int b的区别在于int const a或const int b中的a或b是只读的,其余和int一样。

int const*、const int*

int const* 和 const int * 也是等价的,定义int const * a,那么a即是指向常量的指针,不能用其来改变其指向的值,其与int * 的区别如下图所示。
在这里插入图片描述在这里插入图片描述
由图可知,int const* a或const int *b中,(*a)或(*b)是只读的,其余和普通的int * 一样。
*即:指针指向的内存地址(a)可变,内存单元中的值(a)不能改变

int* const

定义int* const a,那么a的值就不能改变了,即该指针指向的地址不能改变。一旦指向了某个变量,那么就不能再指向其他变量了,地址本身也不能改变。如下:
在这里插入图片描述在这里插入图片描述
由图可知,a是只读的,不能对其进行修改,其余与普通的int * 一样。
*即:指针指向的内存地址(a)不能改变,但是内存单元中的值(a)可以改变。

const int * const 、int const * const

根据前面的const int * 和 int *const,不难推出const int * const的特点了,const int * const和int const * const也是等价的。如图所示:
在这里插入图片描述在这里插入图片描述
由图可知,这里的const int * const a或int const * const b中,a和(*a)或b和(*b)都是只读的,其余与int * 一样。
*即:指针指向的内存地址(a)以及内存单元中的值(a)均不能改变。

int const &、const int &

int const&和const int&是等价的,定义int const &a=b,那么a的值就不能变了。
在这里插入图片描述在这里插入图片描述
由图可知,int const& a或const int& b中,a或b是只读的,其余与int &一样。
总结一下:

类型只读项
int const a/(const int a)a
int const *a/(const int *a)*a
int *const aa
int const *const a/(const int *const a)a、*a
int const &a/(const int &a)a

此外,const也会用于函数中,如:

const function(p1,…){…}

表示函数的返回值为const型的;
假设在类A中重载+运算符:

class A
{
public:
	int a;
	A operator+(const A & x)
	{
		A res;
		res.a = this->a + x.a;
		return res;
	}
}

如果按照上面的写法,那么就有可能出现

// A a1,a2,a3
...
a1 + a2 = a3;

但是编译器并不会报错,但是如果为重载+运算符的返回值加上const,那么a1+a2就成为一个不可变的值,编译器就会对a1 + a2 = a3这一行为报错。

type function(p1,…)const{…}

一般用于类中的成员函数,表示该函数不会修改类中的数据成员

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值