那些C++編程中應當儘早摒棄的陋習

来源:http://www.cnblogs.com/shouce/archive/2016/04/07/5362046.html
-Advertisement-
Play Games

習慣更改(養成良好的編程習慣) 1.包含頭文件的方式,從C語言.h的方式改為<頭文件名>的方式 2.儘量使用迭代器代替下標操作3.建議:儘量避免使用指針和數組 ,儘可能使用vector和迭代器4.採用 string 類型取代 C 風格字元串(使用標準庫類型 string,除了增強安全性外,效率也提高 ...


習慣更改(養成良好的編程習慣)

1.包含頭文件的方式,從C語言.h的方式改為<頭文件名>的方式

2.儘量使用迭代器代替下標操作

3.建議:儘量避免使用指針和數組 ,儘可能使用vector和迭代器

4.採用 string 類型取代 C 風格字元串(使用標準庫類型 string,除了增強安全性外,效率也提高了,因此應該儘量避免使用 C 風格字元串)

5.儘量“將符號 * 緊貼著指針變數名放置”,雖然*緊貼類型名放置也是合法的

5.用指針操作數組時應首先選用類似於迭代器的那種用法

6.const使用時,如果等價,儘量將const放在類型後,以避免類似於typedef使用中的錯誤

7.一般而言,應該優先使用標準庫抽象類而少用語言內置的低級數組和指針。尤其是應該使用 string 類型取代 C 風格以空字元結束的字元數組。現代 C++ 程式不應使用 C 風格字元串。


8.相對於“整型數據的低級直接位操作”而言,“標準庫提供的 bitset 操作更直接、更容易閱讀和書寫、正確使用的可能性更高。而且,bitset 對象的大小不受 unsigned 數的位數限制。”,所以,優先選用bitset

9.類似於++,--這種自增操作符,只有在必要時才使用後置操作符,儘量使用前置自增操作符的形式(組合使用接引用和自增操作符時,通常使用後自增操作符)

10、合適的地方,例如:想在函數調用是實現對實參的訪問,“從 C 語言背景轉到 C++ 的程式員習慣通過傳遞指針來實現對實參的訪問。在 C++ 中,使用引用形參則更安全和更
自然。 ”

11.如果使用引用形參的唯一目的是避免複製實參,則應將形參定義為 const 引用。 

12.應該將不需要修改的引用形參定義為const 引用。普通的非 const 引用形參在使用時不太靈活。這樣的形參既不能用 const 對象初始化,也不能用字面值或產生右值的表達式實參初始化。 

13.通常,將數組形參直接定義為指針要比使用數組語法定義更好。這樣就明確地表示,函數操縱的是指向數組元素的指針,而不是數組本身。由於忽略了數組長度,形參定義中如果包含了數組長度則特別容易引起誤解。 

14.在創建 fstream 對象時,如果調用 open 或使用文件名作初始化式,需要傳遞的實參應為 C 風格字元串,而不是標準庫 strings 對象。程式常常從標準輸入獲得文件名。通常,
比較好的方法是將文件名讀入 string 對象,而不是 C 風格字元數組。假設要使用的文件名保存在 string 對象中,則可調用 c_str 成員(第 4.3.2 節)獲取 C 風格字元串。

15.計算數組元素個數時應定義為size_t,放棄使用int

備註:以上這些條目(除非特別指出)都是源自《C++ Primer》,過些時日將逐條補充整理。另外,評論中有網友貢獻了幾條,查閱資料驗證後也將融匯到以上條目。做成圖表格式,另外將這些些條目避免的問題加進去,如果有的話

另外,在C++ Primer中搜索“圓括弧”三個字,找到使用圓括弧調用預設構造函數等初始化成員等的規則


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前兩天給同事做 code review,感覺自己對 Java 的 Generics 掌握得不夠好,便拿出 《Effective Java》1 這本書再看看相關的章節。在 Item 24:Eliminate unchecked warnings 這一節中,作者拿 ArrayList 類中的 publi ...
  • XML概述 XML概述 XML的歷史背景 XML的歷史背景 GML(1969):通用標記語言 IBM公司的一些專家們一起研究的一個課題: 軟體必須有高度的可移植性,而且必須有一個統一的標準。為了實現軟體的一處編寫多處運行這個願景所誕生。 SGML(1985):專家們對GML升級,標準的通用標記語言。 ...
  • 輸出空心的菱形圖案,這在等級考試與公司面試時也出現過類似題目,本範例的目的在於熟練掌握 for 迴圈的嵌套使用。 創建 Diamond 類,在該類的主方法中調用 printHollowRhombus() 方法完成 10 行的空心菱形輸出。其中 printHollowRhombus() 方法是在範例中 ...
  • 列表生成式 List Comprehensions 列表生成式是Python內置的非常簡單卻強大的可以用來創建list的生成式。 簡單的數值範圍的list可以使用一下方式生成: 稍微複雜的可以利用list生成式: 迴圈後面還可以加上if判斷,例如僅篩選出偶數的平方: 使用兩層迴圈可以生成全排列: 生 ...
  • springboot是用來快速搭建微服務的框架,spring出品,必屬精品。 關於微服務與springboot的更多介紹,參考 使用Spring Boot創建微服務 spring提供了項目剛開始搭建的腳手架網站,可以線上生成空白demo。提供了maven和gradle兩種項目管理方式。 一直使用Ma ...
  • 創建springboot的Maven模塊。 對於Maven管理的項目,還是習慣於多模塊。將項目結構做下調整。 1。修改springboot項目的pom文件。 將springboot項目作為頂級項目。在此基礎上,新建Maven模塊項目web-rest模塊。 IntelliJ IDEA會自動給我們spr ...
  • 切片 Python提供了切片操作符,可以對list、tuple、字元串進行截取操作。 list中的切片應用 語法如下: tuple中切片的應用 tuple也是一種list,唯一區別是tuple不可變。因此,tuple也可以用切片操作,只是操作的結果仍是tuple: 字元串中切片的應用 字元串'xxx ...
  • 早就聽說Python語言操作簡單,果然名不虛傳,短短幾句,就實現了基本的功能。 要檢測目標網站上是否存在指定的URL,其實過程很簡單: 1、獲得指定網站網頁的HTML代碼 2、在HTML代碼中查找指定的URL 3、如果存在,OK;否則,Error 整個程式引用了兩個lib庫,urllib2和sgml ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...