C++中const的变化和调整在哪里?
扫描二维码
随时随地手机看文章
在C语言中,const 用来限制一个变量,表示这个变量不能被修改,我们通常称这样的变量为常量(Constant),《C语言const:禁止修改变量的值》一节已经进行了细致的讲解。
在C++中,const 的含义并没有改变,只是对细节进行了一些调整,以下是最主要的两点。
C++中的 const 更像编译阶段的 #define
先来看下面的两条语句:
const int m = 10;int n = m;
我们知道,变量是要占用内存的,即使被 const 修饰也不例外。m、n 两个变量占用不同的内存,int
n = m;
表示将 m 的值赋给 n,这个赋值的过程在C和C++中是有区别的。
在C语言中,编译器会先到 m 所在的内存取出一份数据,再将这份数据赋给 n;而在C++中,编译器会直接将 10 赋给 m,没有读取内存的过程,和int
n = 10;
的效果一样。C++ 中的常量更类似于#define
命令,是一个值替换的过程,只不过#define
是在预处理阶段替换,而常量是在编译阶段替换。
C++ 对 const 的处理少了读取内存的过程,优点是提高了程序执行效率,缺点是不能反映内存的变化,一旦 const 变量被修改,C++ 就不能取得最新的值。
有读者提出疑问,const 变量不是禁止被修改吗?对,这种说法没错!不过这只是语法层面上的限制,通过指针仍然可以修改。