《C++覆辙录》——1.9:使用糟糕的语言
摘要:?本節書摘來自異步社區出版社《C++覆轍錄》一書中的第1章,第1.9節,作者: 【美】Stephen C. Dewhurst(史蒂芬 C. 杜赫斯特),更多章節內容可以訪問云棲社區“異步社區”公眾號查看。
本節書摘來自異步社區出版社《C++覆轍錄》一書中的第1章,第1.9節,作者: 【美】Stephen C. Dewhurst(史蒂芬 C. 杜赫斯特),更多章節內容可以訪問云棲社區“異步社區”公眾號查看。
1.9:使用糟糕的語言
當一個更大的世界入侵了C++社群原本悠然自得的樂土之時,它們帶來了一些足堪天譴的語言和編碼實踐。本節乃是為了厘清返璞歸真的C++語言所使用的正確適當、堪稱典范之用語和行為。
用語
表1-1列出了最常見的用語錯誤,以及它們對應的正確形式。
表1-1 常見用語錯誤及其對應正確用語
沒有什么所謂“純虛基類”。純虛函數是有的,而包含有或是未能改寫(override)此種函數的類,我們并不叫它“純虛基類”,而是叫它“抽象類”。
C++語言中是沒有“方法”的。Java和Smalltalk里才有方法一說。當你頗帶著一絲自命不凡地就面向對象的話題侃侃而談之時,你可能使用像“消息”和“方法”這種用語。但如果你開始腳踏實地,開始討論你的設計對應的C++實現時,最好還是使用“函數調用”或“成員函數”來表達。
還有一些不足為信的C++專家(是在說你嗎?)使用“destructed”作為“constructed”的對應詞。這明顯是英語沒學好35,正確的對應詞是“destroyed”。
C++ 語言中確實有強制型別轉換(或曰型別轉換)運算符——事實上只有4個(static_cast、dynamic_cast、const_cast以及reinterpret_cast)。遺憾的是,“強制型別轉換運算符”常常被不正確地用于表達“成員型別轉換運算符”,而后者指定了某種對象何以被隱式地轉換到另外的型別。
class C {operator int *()const; // 成員型別轉換運算符//... };``` 當然用強制轉換運算符來完成型別轉換的工作也是允許的,只要你不把用語搞混就成。請參見常見錯誤31中有關“常量指針”和“指涉到常量的指針”的討論,以加深對本主題的理解。空指針 從前,當軟件工程師使用預處理符號`NULL`來表示空指針時,他會遭遇潛在的災難:void doIt( char * );?
void doIt( void * );?
C *cp = NULL;```
麻煩出在NULL這個符號在不同的平臺上,有很多種定義的方法:
doIt( NULL ); // 平臺相關抑或模棱兩可?
C *cp = NULL; // 錯誤?``
事實上,在C++語言里是沒有辦法直接表示空指針的。但我們可以保證的是,數字字面常量0可以轉換成任何一種指針型別對應的空指針。那也就是傳統的C++語言保證可移植性和正確性的用法36。現在,C++標準規定像(void *)0這樣的定義是不允許的37,可見這是個和NULL的使用并無多大干系的技術問題(如若不然,NULL`豈不是成了格外受人青睞的預處理符號?其實它是普通不過的)。可是,真正領會了C++語言精神的軟件工程師仍然使用字面常量038。任何其他用法都會使你顯得相當非主流。
縮略詞
C++軟件工程師都有縮略詞強迫癥,不過與管理層相比,可謂小巫見大巫。表1-2在你的同事給你來上一句“RVO將不會應用到POD上,所以你最好自己寫個自定義的復制ctor”時能派上用場。
表1-2 常用縮略詞的意思
用云棲社區APP,舒服~
【云棲快訊】快速解決數據庫難題,云數據庫經典案例及最佳實踐直播專場!阿里云數據庫專家團隊成員傾囊相授!趕緊報名 原文鏈接轉載于:https://www.cnblogs.com/jzy996492849/p/6934276.html
總結
以上是生活随笔為你收集整理的《C++覆辙录》——1.9:使用糟糕的语言的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《正则表达式经典实例(第2版)》——2.
- 下一篇: window编程_消息分类