由于个人的记忆原因,我需要经常重新学习已经学过的东西,所以有时会写非常简单的东西。
关于const
首先明确,const 是 承诺的,是程序员承诺这个值不会被修改,但是实际上是可以的(比如转型)
被const 修饰的变量在编译时不同的编译器会有不同的实现方式(不同编译器会有不同效果【1】)
关于const+指针
【理解一】
//描述:指向(静态变量)的指针
const int *p;
//描述:指向(静态变量)的指针
const int* p;
//描述:指向(静态变量)的指针
int const *p;
//描述:显示声明指针p是静态的
int* const p;
【理解二】面向错误
cppconstpointer.cpp:3:23: error: invalid conversion from 'int*' to 'int' [-fpermissive]
int *const p=&a,c=&a;
^~
在我将代码改为下面这种会正常
int *const p=&a,*const c=&a;
【1】:在const的实现上,实际上是交给编译器来做决定,没有统一的标准,以前的时候可以通过特定编译器的问题,通过指针实现对const变量的修改。现在这种做法会直接报错(invalid conversion from ‘const int*’ to ‘int*’),同时的,转型操作额外提供了一种可以清除 const承诺 的转型。