现代的C++,比较笼统。最近10多年的东西是否是现代的呢?我认为“时髦”这个词更准确一些。每个年代,时髦总是标新立异的,总是被年龄大一些的人看不惯的(虽然这些人也曾经“赶过时髦”)。Modern C++就是用最时髦的东西去装饰您的代码。但是本质的东西还是没有变。改革初期,最时髦的服饰是喇叭裤,霹雳舞手套。那时没有智能手机,时髦的人扛着一台卡带录音机招摇过市。我们来分析一下。喇叭裤穿着也就罢了,总要穿衣服出门才文明吧?可是像乔峰一样带着音响出场是几个意思?后来时代发展了,卡带录音机逐渐变小,出现便于携带式的随身听。为了不影响他人,出现了耳机这个配件。之后就是mp3播放器上市了,无线蓝牙耳机替代了绕脖子的音频线。智能手机出现后,mp3不见了踪影。时尚和技术在变化,不变的是什么? 是人们对文艺和音乐的追求。
C++98 出现了模板和STL,带着这些东西上场的年轻人被老程序员侧目。std::map<int, std:: >::const_iterator ite = m.begin(); 是都是什么做派?世界上没有什么不能替代的东西,用C也能实现数据结构和算法。这没有任何问题,很多人一辈子也不习惯听着音乐到处跑(包括我)。C++11/14时代到来后,右值引用,lamda表达式,函数式编程,auto/decltype, constexpr, 智能指针... 踊跃的出现,有什么用?如果当初没有去赶std::map<int, std:: >::const_iterator ite = m.begin();的时髦,自然对auto ite = m.begin();没有任何感觉。(从不用随身听的人,会理解mp3的好处吗?)。如果当初对大对象传递过程中,拷贝来拷贝去毫不怜惜效率的损失,自然对右值引用的出现无动于衷。C++就这点好处,思维停留在1950年代,在202z年代也能活的很好。用支持C++17/20的GCC编译器,编写纯C也毫无问题。穿着中山装,使用收音机和报纸接听新闻的人也能过的颇舒适。C++17又出现了constexpr if,fold expression, structured binding...那可好了,从未接触过enable_if,模板递归,tuple的程序员开始对此嗤之以鼻了,这些都是什么鬼?
说这么多,就一个意思。不随身听音乐也就是罢;随身听音乐,就从大喇叭录音机一直跟到mp3和手机。时髦不跟也罢,跟时髦,就会一直跟下去。(时髦,现代)Modern C++不跟也罢,跟就一直跟下去吧。