constchar*,charconst*,char*const的區(qū)別問(wèn)題幾乎是C++面試中每次都會(huì)有的題目。
事實(shí)上這個(gè)概念誰(shuí)都有只是三種聲明方式非常相似很容易記混。
Bjarne在他的TheC++ProgrammingLanguage里面給出過(guò)一個(gè)助記的方法:
把一個(gè)聲明從右向左讀。
char*constcp;(*讀成pointerto
cpisaconstpointertochar
constchar*p;
pisapointertoconstchar;
charconst*p;
同上因?yàn)镃++里面沒(méi)有const*的運(yùn)算符,所以const只能屬于前面的類型。
C++標(biāo)準(zhǔn)規(guī)定,const關(guān)鍵字放在類型或變量名之前等價(jià)的。
constintn=5;
//sameasbelowintconstm=10;
constint*p;//sameasbelow
const(int)*pintconst*q;//(int)const*p
char**p1;
//pointertopointertochar
constchar**p2;
//pointertopointertoconstchar
char*const*p3;
//pointertoconstpointertochar
constchar*const*p4;
//pointertoconstpointertoconstchar
char**constp5;
//constpointertopointertochar
constchar**constp6;
//constpointertopointertoconstchar
char*const*constp7;
//constpointertoconstpointertochar
constchar*const*constp8;
//constpointertoconstpointertoconstchar