const关键字的一个小优化
https://www.jianshu.com/p/4ab2c4cfae81
关于const修饰的指针和引用
下面的部分我将以普通变量,和const修饰的变量为右值,分别分析普通指针,普通引用,常指针,常引用,指针常量,const int * const 作为左值时的情况,俩判断const关键字的用法:
int main()
{
//我们看看另个东西第一类,C语言风格的字符串
const int cv = 1;//const修饰的变量
int v = 1; //普通变量
const int *p1 = &v;
const int* p2 = &cv;
int *p3 = &v;
int *p4 = &cv;
int & p5 = v;
int & p6 = cv;
const int &p7 = v;
const int &p8 = cv;
const int * const p9 = &v;
const int * const p10 = &cv;
return 0;
}
VS自带的检查功能会将不合法的赋值语句给标记出来,如下图所示:
通过这个实验,我们知道一下几点:
1 所有的语句对于普通变量都适用,但是与此同时,不会修改变量的属性,即使我对v进行修改。
2 普通指针或者引用不能够指向常变量
3 常量指针指向的值不可以通过常量本身改变,为什么我不说常量指针指向的值不可以改变呢?看下面这个例子:
int a = 1;
const int *p = &a;
cout << *p<< endl;
a = 2;
cout << *p << endl;
system("pause");
常指针指向变量地址是合法的,可以说常指针指向的就是a的值,但是a的值可以有本身的变量名称改变,不可以通过P改变
4 指针常量(注意我说的是指针常量本身)定义时初始化,就初始化之后就不能改变(指向不能改变)。
总结const 关键字的作用
1 const 修饰变量作为常量,为开发任务中需要在编译过程中需要保持不变的概念作为技术支撑。
同时,const修饰的指针也是作为这一部分的内容。
2 const & 常引用作为函数参数。这里有两个点,一个是为什么要用引用,如果形参数值传递的话,实参会拷贝一份,函数体内的实际操作都是针对复制品在做操作。如果传入的是引用,那么实参就是变量本身,可以在函数体内对传入的形参进行操作。2,为什么要用const修饰,正式因为有1的性质,在一些不允许对内容进行修改,同时又需要用到变量本身,那我们就可以使用const关键字来防止传入的参数被修改。
常引用的一个最广泛的应用例子为:拷贝函数中的参数