C++ auto类型说明符

int i {} ;
const int c = i , &r = c;
auto a1 = c;
auto a2 = r;
理解费力的选手,完全是进入了二个错误认知.
先纠正简单的第一个:
int& r = c; // int& 是一个类型
decltype(r)会教你int&是一个类型
指针和引用之所以复杂环境的应用理解不了,最根本的原因是:
Type*, Type& 你没把它当类型
(你不把它当个"人" ,它又怎么会屌你呢?)
之所以你感觉不出来它是类型,是人家比利时那位写出第一个c++编译器大神牛X, 人家在后面的C++版本推动着语法糖的建立,让你完全感觉不出它是类型而又能干更多事.
建议先从代码风格入手,改掉错误认知:
int &r = c; // &r 可不能做变量名, 难道你想左值取地址?
请大气点写成下面这样吧:
int &r = c; ---> int& r = c;
Fun(const int &n){};---> Fun(const int& n){};
再纠正第二个错误认知:
const 关键字加上就是常量。
const int i = 0; // 0是字面量。
所有字面量都是常量。const关键字只是加"只读"属性。
没有任何一本C++圣经会告诉你这是常量,只会说它"像常量"。
"左值是常量的只读属性的变量", 它的左值永远是没法修改的。 就像你爸是你爸这是你永远没法改变的。
也许会有人说,我可以强制类型转换修改它。 你能修改的只是 只读属性的变量而已,而且这仅仅只是你的错误认为你修改了。这种形为就像"认贼作父" 一样。
十分扎心的告诉你,其实强制类型转换修改 const 关键字的变量你从来就没成功过。因为编译器把 const关键字存储的东西写到二进制生成文件里了。 这就像"血脉里有父亲的基因一样"
你改的只是内存中的副本。它只是给你"认贼作父" 提供了可操作性。
你要当杨康,那你去当吧去找你的完颜洪烈吧。 你反正流的是杨铁心的血脉。
你大爷还是你大爷。