const int a 表示a是一个整形常量,可以理解为修饰int
int const a 表示a是一个整形常量,可以理解为修饰int
int* const a 表示a是一个常指针,指针位置不能改变,可以理解为修饰*
const int* a 表示a指针必须指向一个整形常量,指针位置可以改变,可以理解为修饰int
int const * a 表示a指针必须指向一个整形常量,指针位置可以改变,可以理解为修饰int
const int* const a 表示a是一个常指针,指针指向一个整形常量,可以理解为修饰int和*
规律:
在int 左右的const都是修饰它的
在*右边的const才是修饰它的
补充:常引用
const string& a
或者
string const & a
注意:string &const a这种写法是错误的
常引用时:引用的内容不能改变。
有人会问,引用不改变的方法是什么?答案是引用本来就是不可改变的。对引用赋值其实是改变了引用的变量的值。
很多库中函数参数为什么经常是常引用呢?原因是将常引用实参传递给引用类型的型参会报错,而将引用类型的实参传递给常引用类型的型参不会报错。
继续补充:常数组
const int a[3]
或者
int const a[3]
表示数组内容不能改变。
其实数组头指针本来就不能改变因此这种情况是头指针和数组内容都不能被改变。