const总结

const是constant的缩写,意思是“恒定不变”

1. 可以定义const常量

学名叫限定符声明变量

	const int i=4;
	int j=5;
	i=j; // l-value specifies const object 错的
	j=1; // 对的

以上代码中,一共定义两个变量,其中变量i的定义被const限定符修饰,那么被const限定符修饰说明了什么呢?这里首先要说一下C/C++中 左值、右值的问题。

左值:可放在赋值符号左边的变量,即具有对应的用户可以访问的存储单元,并且可以由用户去改变其值的量。

左值表示存储在计算机内存的对象,而不是常量或者是就算结果。或者说左值代表的是一个内存的地址值,并且通过这个内存地址就可以对指定地址的内存进行相应的读、写操作,这里最关注的对其写的操作。左值的英文表示是:L-Value 其中的L代表的是Location表示可寻址,并不是指的Left

右值:可以放在赋值符号右边的变量,是计算机能读取其值。

右值指的是引用了一个存储在某个内存地址里的数据,简言之,左值相当于地址值,右值相当于数据值。右值的英文表示是:R-Value其中的R代表的是 Read表示可读。

从上面的说明中,我们就可以看出,原本没有const限定符修饰的变量作为左值时是可以被访问的、其地址所在内存的值是可以被改写的,但是加上限定符const以后的变量将不再具有成为左值的权利了,因为此时这个变量经过const的修饰以后已经不具备作为左值的条件了,所以上面代码中的第三行会报错,而第四行确不会报错。

回头想想为什么我们要加上一个const限定符来修饰一个变量呢?对于上面这种情况只有一种原因就是我们所定义的i变量的值之后,不希望被改变。既然经过const修饰的变量对应的内存单元不能被访问(更改),那么在最初定义的时候就一定要给这个经过const的变量附上初值,否则,定义它有什么用呢,不给这个变量付初值、这个变量也永远不能成为左值,也就意味着我们定义了一个永远也没有具体指的变量,又有什么意义呢,所以在定义const修饰的变量时,一定要赋初值,否则就没什么意义了吧!

一下这段代码说明了什么?

const int i=110; 
int *p=(int*)&i; 
p=100;
cout<<i<<endl;
cout<<*p<<endl;

运行之后,会报错error C2440: '=' : cannot convert from 'const int' to 'int *'指的就是第三行,从而我们可以看出100隐形的就是const int型的一个量

在具体深入一下,不论是左值、右值、const限定符都是由语言设计者设计的,那么他是根据什么来规定这些的呢?C++语言的创始者是Bjarne Strousstrup,但是他并不是计算机语言的第一个创始者,C++语言只不过是众多语言中的一种,还有很多在其之前就创立的语言例如:C、汇编、Pascal、Delphi。但是语言使用最终是要建立在硬件上的,不是么?我没看见谁的代码写完之后在天上飞,所以设计语言的大牛们都深明这一点,即搜设计的语言最终是要通过硬件来实现其设计的相应功能的,谈到此,必须得了解一下硬件的知识了。

学习和使用过汇编语言的人们想必一定很熟悉计算机组成原理,否则学了也是稀里糊涂的过过就那么回事儿了。为什么呢?

汇编语言是直接操作寄存器和存储器的一门语言,它仅次于0、1二进制语言。

说到0、1二进制语言就不得不说说硬件是怎么通信的了,学过物理的都知道硬件是通过高、低电位来工作的,比如说家用电电灯的开关,在逻辑上,我们可以通过0、1来表示他们的状态,计算机内的硬件设计是由N个像家用电灯的开关组合而成的,这里的比喻有可能不是太恰当,但在此重在说明逻辑上的意思。以前我也是不解为什么一个个的开关可以创造出这么奇迹的东西来,后来在询问老师的过程中,老师给我举了一个例子:一个人能干什么?一百个人能干什么?明白了么?以前很是纠结计算机是怎么设计出来的,但是现在谈的是计算机语言的应用,so点到为止吧!因为在设计计算机电路时要涉及到很多的电学、物理学以及数学上的知识,在此说这些重在说明先别纠结这些知识,先了解一些,并不是说它不重要,而是在了解其原理是需要许多其他专业知识的辅助,如果想了解就先学学电子电路、模拟电路、微机原理。所以把硬件的设计抽象化,我们来看看抽象化后的计算机主要器件具有什么功能。算了 越说越多 直接看看计算机组成原理吧同时和汇编双管齐下,方可恰到好处

2.可以修饰函数的参数(表明它是一个输入的参数,在函数的内部是不能被改变其值的)

void Func(const A &a)

{

}

3.可以修饰函数的返回值(使其返回值不为左值)

const A Func(const A &a)

{

}

4. 可以修饰函数的定义体(则表明是一个常函数,不能修改类的成员变量)

void Func(const A &a)const

{

}



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值