最近C++似乎陷入了中年危机,已经被美国国会列为“不受欢迎”的语言之一,快要被新贵Rust取代,处境危险!
最近又因为”auto“而被指控,可谓雪上加霜!
那么”auto“是什么意思呢?
如果出现了一个变量,它的类型声明是“auto”,表示编译器会这个变量后面出现的语句,“自动”推断出变量的类型!
譬如:
auto i=1;
那么:
变量i就会被认为是一个int类型。
这样做的变量,并不是只有那些基础变量类型(int、double、float)可以使用,其实lambda表达式也可以使用。当然更别提那些长长的“Iterator<T> itor”了。
auto可以提供很多便利!
同世界上所有的便利一样,就会存在“滥用”的情况。
以前的时候,说一户人家大度有钱,就会举一个例子“他家每年冬天开仓放粮,对那种领完以后,继续去队伍末尾在去派的行为,都会睁一只眼闭一只眼”。那么这里,领完再领,就是一种对慈善行为的滥用!
那么“auto”会不会被滥用呢?
那是肯定的,毕竟孔子说过,懒惰是程序员的一大美德!
如果能够少打几个字,肯定要少打几个字的。auto就是现成的作案工具,岂可放过!
这么频繁的使用“auto”有什么影响呢?
一定会影响程序后续的可读性,这也是肯定的。毕竟看程序的时候,满屏幕的“auto”是会让人抓狂的,因为要想弄懂一个“auto”变量的类型,必须去读程序的上下文才能理解其含义,会额外花费很多的脑细胞!
在这个情况下,auto和以前鲜明的声明想比,对于理解而言就是一场灾难!
auto这种功能的关键词,并不是第一次出现。
在C#里面很早就出现了“var”这个关键词,跟C++目前的这个“auto”的作用基本相同,都是一家人!
但是,在C#里面,出现“var”关键词的初期用意并不是只是“自动变量”这么简单,而是跟LINQ这个技术联系在一起的!
或者说为了实现Linq,微软的C# team反向推理出了auto这个关键词。有了auto的”变量类型自动推理“功能,C#的linq才更完善。
在C#里面,auto关键词的使用其实也是很频繁的。
当时在C#社区也引起了争论,就是到底要不要禁止在程序里面使用auto关键词。
当时双方也是各持己见,豆腐脑的鲜甜说个不停。
但是很快也就没了声音。
毕竟在每一个程序里面,应该都有一个决定人。要么这个人是程序员自己,要么是团队管理员,只要规定好,大家统一,符合团队利益就可以了!
而今,C++的“auto”也出现了类似的讨论,也不稀奇。
说起来了auto,说起来了C#,不禁感叹C#给我们带来了多少关键词。
出了auto(var),还有“async、await”这些,都出现在很多语言里面,包括Javascript、Python等流行的语言。
C#虽然不是最流行的语言,但可能是“关键词”被抄袭最多的语言!
好东西需要借鉴,读书人一大抄,看来是很有道理的。
我是明月,