C语言的const
首先,C语言中并不认为const限定的变量是常量,它只是将变量设置为只读的形式了,并不是将其变为了变量。
可以在代码中定义一个const限定的变量,我们知道C语言定义数组只能使用常量,你使用const定义的变量,是会报错的。
c++的const
c++对const修饰的变量进行了优化,它不仅将数据设置为只读的形式,而且在使用const定义的变量时,只是简单的替换 -- 是不是很熟悉,和宏定义很类似(但不一样,宏替换是傻瓜替换,不会进行任何计算,const定义的会自动计算常量表达式)。
什么是进行替换?
替换就是,我们知道const的限定的值,只有初始化时可以赋值,当我们初始化时赋值之后,在程序的后面如果出现或者使用了这个变量,那么它在使用时不是去访问变量数据的内存,从内存中获取数据(因为变量在使用时,就是存内存中去取数据的),而是直接将这个量替换成其初始化的数据。(不去内存取值)
所以说c++的const定义的量才是常量。
如上图的c++程序,我们使用const 的 定义的变量 n ,定义了一个数组。
我们知道定义数组时我们只能使用常量(宏常量或普通常量),不能使用变量。如上图,我们定义一个普通的变量,定义数组b,发现会报错。
所以:c++的const限定的数据是真正的常量,它在使用是也是进行简单的替换(并不是去访问变量的内存,直接将出现n的位置都替换成其初始化的值) 。
总结:
总之C语言的const并不是真的定义一个常量,但是c++是这样的。 c语言使用const定义的量是只读的变量,c++的是常量。(所以在一些只可以使用常量的地方(数组,switch中case后的数据等),就能使用const修饰的量)