Quora熱議:如果有強(qiáng)大的C++編譯器,請不要使用C語言!
如果手頭有一個(gè)強(qiáng)大的C++編譯器,切勿使用C。
如果需要,可以使用禁止C++的所有功能的編碼約定,包括標(biāo)準(zhǔn)C?++庫,異常,RTTI以及C++符號修飾。
但是,C++具有許多可以編寫代碼的功能。

更具可讀性…無需額外費(fèi)用,
更易于維護(hù)...無需額外費(fèi)用,
運(yùn)行更快……無需額外費(fèi)用,
開發(fā)速度更快……無需額外費(fèi)用,
可以擴(kuò)展并開放以進(jìn)行關(guān)鍵變更…無需額外費(fèi)用。
所謂成本,是指運(yùn)行時(shí)性能,可執(zhí)行文件大小和內(nèi)存使用情況。但是,如果您愿意權(quán)衡取舍,那么事情可能只會(huì)變得更好。

一些更多的細(xì)節(jié):
在最基本的層次上,可以從更豐富的語法和關(guān)鍵字中受益。例如auto,decltype,typename,using。在正確的上下文中嵌套信息。使用名稱空間,限定常量,類型名和嵌套的typedef。還有一些語言功能可以消除C語言的冗長和晦澀之處:閉包vs?f(void?*),模板函數(shù)vs宏。
C程序是水平層,一層在另一層之上,抽象是一個(gè)void?*。相同的信息需要反復(fù)編碼,然后所有方面都反映了如何在一個(gè)方面實(shí)施這種更改。
在C++中,可以一次定義信息并將其傳播以創(chuàng)建數(shù)據(jù)類型,匹配生產(chǎn)代碼以及診斷所有這些維護(hù)類型安全且無運(yùn)行時(shí)開銷的信息??梢院敛毁M(fèi)力地編寫通用代碼。由于重載,模板功能和類型特征,可以在不同的上下文中重用功能較小或較大的代碼塊,并可以任意組合。
這里的提示:C?++庫之外的許多工具實(shí)際上不需要鏈接到C?++庫二進(jìn)制文件。

C?++編譯器能夠生成更好的優(yōu)化代碼的原因很多。強(qiáng)類型系統(tǒng)(查找強(qiáng)別名),使用const類型和const表達(dá)式。然后,用作智能宏的模板函數(shù)可以消除循環(huán),并且許多元代碼可以解決編譯時(shí)和實(shí)際調(diào)用調(diào)用中的條件。
在不同的上下文中再次重用通用代碼的能力意味著更少的代碼編寫。?C?++允許以較小的片段來破壞程序,從而可以進(jìn)行更精細(xì)的測試和/或通過不同的橫截面而不僅僅是層。測試是現(xiàn)代敏捷開發(fā)的基礎(chǔ)。缺乏測試通常源于不良的可測試性,阻礙了開發(fā),阻礙了重構(gòu)并鼓勵(lì)了技術(shù)債務(wù)的積累。
C的局限性傾向于使人們傾向于使用特定的分層代碼。某些類型的抽象無法表達(dá),因此位最終散布在代碼庫中并被復(fù)制。沒有辦法將它們作為功能實(shí)體一起進(jìn)行測試。只要新功能適合現(xiàn)有體系結(jié)構(gòu),一切都將適中。當(dāng)需要進(jìn)行一種顛覆內(nèi)部層次結(jié)構(gòu)的改變時(shí),這確實(shí)是一個(gè)痛苦。有很多代碼重寫,包括測試。風(fēng)險(xiǎn)很大。

總結(jié)一下
?C?++具有許多小而強(qiáng)大的功能,這些功能累計(jì)產(chǎn)生了巨大的不同。它們中的許多易于掌握,可以在現(xiàn)有的C代碼庫中使用。其他可能在重構(gòu)或技術(shù)債務(wù)清除期間添加。甚至元編程也可以逐漸豐富類似C的代碼。

文章翻譯自Quora
PS:另外對于學(xué)習(xí)編程或者正在工作的朋友,如果你想更好的提升你的編程能力乃至轉(zhuǎn)行,學(xué)好C語言C++編程!彎道超車,快人一步!筆者這里或許可以幫到你~
微信公眾號:C語言編程學(xué)習(xí)基地
分享(源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長比自己琢磨更快哦!
