一、对于修饰变量的用法
对于const和&的基础用法就不说了。下面说点之前有误区和容易错的地方
const修饰变量的误区
关于const类型,这里有一个我之前的误区,我以为const定义的时候只能用常量初始化,但是实际上是没有这个规定的。const定义的变量可以用各种const,非const对其进行初始化,甚至可以是函数的返回值之类的。
const int a = 5; //在编译的时候进行初始化,即类似于#define,进行全文替换
const int b = size(); //在执行的时候初始化
int n =7;
const int c = n; //在执行的时候初始化
这个其实非常显然啦,因为在函数传参的时候,就能看出来,形参可以是const的,但是传进去的实参可以是非const的。[1]
对于这个问题就可以看出中文各种博客上面的说法有多垃圾了,就我看过的80%的博客都说const必须要用常量初始化,同时在编译时就完成了初始化。以后技术问题少看中文博客,之前被误导了那么久。
常量指针和指向常量的指针
指向常量的指针
const int *p,表示指向常量的指针,按照之前上篇文章中的方法C++
中复合类型声明的理解从右到左看,p是一个指针,指向const
int,表示的意义就是不能通过p来修改p指向的值,而p本身所指向的地址是可以修改的。(此处也可以写成int const *p是一样的)
常量指针
int *const p,表示p本身是一个const,所以p所指的地址不会变,但是地址里的值是可以修改的。