欢迎光临散文网 会员登陆 & 注册

C++ auto类型说明符

2023-02-28 15:42 作者:DIY大魔王  | 我要投稿


06:57



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关键字存储的东西写到二进制生成文件里了。 这就像"血脉里有父亲的基因一样"

你改的只是内存中的副本。它只是给你"认贼作父" 提供了可操作性。

 你要当杨康,那你去当吧去找你的完颜洪烈吧。 你反正流的是杨铁心的血脉。

  你大爷还是你大爷。

C++ auto类型说明符的评论 (共 条)

分享到微博请遵守国家法律