worwolf
2024-11-01T12:20:51+00:00
靠C艹维生数年,接过屎山,带过新人。最近偶然接了一份看着很舒服的屎山,其中的typedef真的是让我眼前一亮,大大降低了理解成本。
从学校作业到工程代码,课本、老师、同事、上司、屎山,周遭的一切会不断提醒你变量命名的重要性。意识不到这点的人,大概率也不会在这一行干的太久。相对的,如果迈过这个坎,大概率写的代码也是至少可以接受的。如果想要更进一步,有个很相似又容易被忽略的一点,就是做好变量类型的命名,即善用typedef。
对于typedef的理解一般会经历几个阶段。一是不知道有什么用,除非从别处copy,否则一律不用;二是发现有不用不舒服的场景,比如struct写默认构造;三是继承了一份C遗产,把天书直接typedef的一刻,怎一个爽字了得,自此正视typedef;四是有了新欢auto(或者是公司的编译服务器终于更新了),于是一路auto,变量名?真不熟;五是回头看自己代码(或者遇到一个不好说话的Reviewer),默默把部分auto回退,回头看到了角落里的typedef,握手言和。
我经历的大多数同事都在阶段三,也见识过阶段四的auto侠。大部分同事和我自己使用auto都很克制;很多auto侠常用“现代语言风格”“看不出类型是你的IDE不够智能”来反驳,可是现在还在用C艹的行业无法回避的一点是,那个还在用VS2009的秃头男子,很可能是公司的大动脉。还有个隐患是不同编译环境对于auto的推导不能保证完全一致,新工作的惊喜之一就是无法预料编译器会用哪个古董版本。
我自己的经验是,只在以下两种情况使用auto。一是直接能看出来类型的,比如auto t_myClass = new myClass; 二是不必在意类型的,比如STL迭代器,毕竟谁也无法忍受那漫长的前摇;还有auto greater =[](const T &v0, const T &v1){return v0 > v1;};这样的。其他情况我都是不用auto,看现在很多新特性比如auto用在template返回类型之类的,我都已经跟不上发展了。
在克制地使用auto这一前提下,要让代码水平更进一步,typedef必然会走进视野。变量命名很难,在适当的时机给变量类型重新命名就更难了。typedef既省去了C遗产的繁文缛节,又避免了现代CPP的激进改革。善用typedef,写的是连接过去和未来的代码,平稳渡过职业生涯。
偶感而发,分享给各位。
从学校作业到工程代码,课本、老师、同事、上司、屎山,周遭的一切会不断提醒你变量命名的重要性。意识不到这点的人,大概率也不会在这一行干的太久。相对的,如果迈过这个坎,大概率写的代码也是至少可以接受的。如果想要更进一步,有个很相似又容易被忽略的一点,就是做好变量类型的命名,即善用typedef。
对于typedef的理解一般会经历几个阶段。一是不知道有什么用,除非从别处copy,否则一律不用;二是发现有不用不舒服的场景,比如struct写默认构造;三是继承了一份C遗产,把天书直接typedef的一刻,怎一个爽字了得,自此正视typedef;四是有了新欢auto(或者是公司的编译服务器终于更新了),于是一路auto,变量名?真不熟;五是回头看自己代码(或者遇到一个不好说话的Reviewer),默默把部分auto回退,回头看到了角落里的typedef,握手言和。
我经历的大多数同事都在阶段三,也见识过阶段四的auto侠。大部分同事和我自己使用auto都很克制;很多auto侠常用“现代语言风格”“看不出类型是你的IDE不够智能”来反驳,可是现在还在用C艹的行业无法回避的一点是,那个还在用VS2009的秃头男子,很可能是公司的大动脉。还有个隐患是不同编译环境对于auto的推导不能保证完全一致,新工作的惊喜之一就是无法预料编译器会用哪个古董版本。
我自己的经验是,只在以下两种情况使用auto。一是直接能看出来类型的,比如auto t_myClass = new myClass; 二是不必在意类型的,比如STL迭代器,毕竟谁也无法忍受那漫长的前摇;还有auto greater =[](const T &v0, const T &v1){return v0 > v1;};这样的。其他情况我都是不用auto,看现在很多新特性比如auto用在template返回类型之类的,我都已经跟不上发展了。
在克制地使用auto这一前提下,要让代码水平更进一步,typedef必然会走进视野。变量命名很难,在适当的时机给变量类型重新命名就更难了。typedef既省去了C遗产的繁文缛节,又避免了现代CPP的激进改革。善用typedef,写的是连接过去和未来的代码,平稳渡过职业生涯。
偶感而发,分享给各位。