C++ auto類型說明符

int i {} ;
const int c = i ,?&r = c;
auto a1 = c;
auto a2 = r;
理解費(fèi)力的選手,完全是進(jìn)入了二個(gè)錯(cuò)誤認(rèn)知.
先糾正簡單的第一個(gè):
int& r = c;??// int& 是一個(gè)類型?
decltype(r)會(huì)教你int&是一個(gè)類型
指針和引用之所以復(fù)雜環(huán)境的應(yīng)用理解不了,最根本的原因是:
?Type*,?Type&?你沒把它當(dāng)類型
?(你不把它當(dāng)個(gè)"人" ,它又怎么會(huì)屌你呢?)
?
?之所以你感覺不出來它是類型,是人家比利時(shí)那位寫出第一個(gè)c++編譯器大神牛X, 人家在后面的C++版本推動(dòng)著語法糖的建立,讓你完全感覺不出它是類型而又能干更多事.
建議先從代碼風(fēng)格入手,改掉錯(cuò)誤認(rèn)知:
int &r = c; // &r 可不能做變量名, 難道你想左值取地址?
?請大氣點(diǎn)寫成下面這樣吧:
int &r = c; ---> int& r = c;
Fun(const int &n){};---> Fun(const int& n){};
再糾正第二個(gè)錯(cuò)誤認(rèn)知:
?const?關(guān)鍵字加上就是常量。
const int i = 0;?// 0是字面量。
所有字面量都是常量。const關(guān)鍵字只是加"只讀"屬性。
沒有任何一本C++圣經(jīng)會(huì)告訴你這是常量,只會(huì)說它"像常量"。
"左值是常量的只讀屬性的變量", 它的左值永遠(yuǎn)是沒法修改的。 就像你爸是你爸這是你永遠(yuǎn)沒法改變的。
也許會(huì)有人說,我可以強(qiáng)制類型轉(zhuǎn)換修改它。 你能修改的只是 只讀屬性的變量而已,而且這僅僅只是你的錯(cuò)誤認(rèn)為你修改了。這種形為就像"認(rèn)賊作父" 一樣。
?十分扎心的告訴你,其實(shí)強(qiáng)制類型轉(zhuǎn)換修改 const 關(guān)鍵字的變量你從來就沒成功過。因?yàn)榫幾g器把 const關(guān)鍵字存儲(chǔ)的東西寫到二進(jìn)制生成文件里了。 這就像"血脈里有父親的基因一樣"
你改的只是內(nèi)存中的副本。它只是給你"認(rèn)賊作父" 提供了可操作性。
?你要當(dāng)楊康,那你去當(dāng)吧去找你的完顏洪烈吧。?你反正流的是楊鐵心的血脈。
??你大爺還是你大爺。