const限定符在变量、函数、指针中的使用
个人理解: 不管是在变量、函数、指针等中加入const限定符,一般都按照优先级高低+从右向左结合的方式去理解(ps:如理解有误,望指教~)
case 1:
const int butfsize = 512;
理解:
a):没有优先级,则变量名bufsize首先与int结合,表明是一个int型变量;
b):声明为int型的bufsize变量再与const结合,则表明它是一个常量;
c):两者结合起来,bufsize是一个int型常量,初始化为512;case 2:
const double *cptr;
理解:
a):cptr与*结合,表明它是一个指针;
b):*cptr与double结合,表明它是一个double型指针;
c):若没有const限定符,表明cptr指向double型变量,增加const限定符,则cptr指向范围缩小,限定在double型的const变量范围
d):上述3点表示cptr指针的指向对象是const型,但其本身非const指针;case 3:
int *const currErr = &errNum;
理解:
a)存在*,最终是要与变量名结合在一起,故此时在理解上可将等式类比成int const *currErr = &errNum;
(参考int* p
等价int *p
, 若理解有误,请指正)
b):仍然按照从右向左的结合方式,*currErr是一个指针;
c):const 与*currErr
结合,表明它是一个const型指针;
d):int限定指针的指向范围,表明const型指针指向一个int型的变量;
f):const型指针通俗来讲,表明“我看上你了errNum,就绝不会移情别恋再看上其他的变量“;case 4:
bool (*pf)(const string&)
理解:
a):按照优先级顺序,先考虑()内的;
b):对const string&
而言,形参首先是一个引用,然后是一个string类型的引用,最后将引用限定一个范围,属于const引用,表示在函数中只能读而不能对引用变量进行写操作;
c):(*pf)表明pf先是一个指针;
d): 故pf是一个指向函数的指针,且该函数是带有常string引用和bool返回值。case 5:
double avg_price() const;
理解:
a):根据规则,将const加在成员函数的形参之后,成员函数声明为常量,不能改变其操作对象的成员变量的值case 6:
const int fun();
理解:
a):也适用于从右向左结合方式,首先是一个函数,其次返回int型变量,然后const对返回值进行范围缩小的限定,只能是const型即常量。注:遇到其他形式再补充~