C++ Tips: 指標、數組和結構

來源:互聯網
上載者:User

5.1 避免非平凡的指標算術。

複雜的指標算術通常不必要,最好避免。原因是可能導致未定義的結果。兩個指標指向同一個數組的元素時,指標相減才有意義。指標加上或者減去一個整數,得到的結果還是一個指標,如果這個值不指向原來指標指向的數組的元素,那麼使用這個值得結果就是無定義的。指標相加沒有意義,因此不被允許。

 

5.2 當心,不要超出數組的界線去寫。

使用數組時總是應該對數組越界保持警覺。一旦數組越界,就會產生無定義的結果,程式可能會崩潰或者稀裡糊塗的繼續運行。緩衝區溢位是駭客廣泛利用的一種攻擊手段,它就是利用超出數組的界線去寫記憶體來達到目的的,所以我們應使用帶有長度檢查的函數版本,如strncpy, snprintf等等, 而不是strcpy, sprintf

 

2.3 盡量使用0而不是NULL

   對於0和NULL的是非曲直, imperfect C++中有詳細的介紹,我們應該記住C++中使用0而不是NULL

 

5.4 盡量使用vector和valarray而不是內部的數組。

   vector被設計用來類比動態數組,它的記憶體布局和C數組時一樣的。這裡有一個用vector代替C數組的例子。

std::vector<char> v; // create vector as dynamic array of chars

v.resize(41); // make room for 41 characters (including '/0')

strcpy(&v[0], "hello, world"); // copy a C-string into the vector

printf("%s/n", &v[0]); // print contents of the vector as C-string

 

5.5 盡量使用string而不是以0結尾的char數組。

   C風格char數組依靠0來確定字元個數,標準庫的string存有長度,並不依賴於0來確定大小。而且string中還可以包含0,需要注意的是如果string表示的字串中間含有0,這時調用c_str()返回一個const char* 指標, 如果用strlen來對這個值這求長度, 那麼這個長度是不正確的, 他並不等於string的成員函數length()返回的值。Effective STL中條款13更詳細的解釋了使用string代替以0結尾的char數組

 

5.6 盡量少用普通的引用參數。

   普通的引用參數如 void f(int& i),調用時是f(x),這種形式並不能給人x的值被修改的提示資訊,而x=f(x)或者f(&x)則可以。所以應少用普通的引用參數。但在實際中用普通的引用參數作為輸出參數是很常見的,這時可以用有提示意義的函數名,如update(x)

 

5.7 避免void*,除了在某些低級代碼裡。

   void*常常出現在系統中很低的層次,如果在系統較高層次上出現void*,應該認為是可疑的, 就像設計錯誤的指標。值得注意的是,到函數的指標和到成員的指標都不能賦給

void*

 

5.8 避免在代碼裡使用非平凡的文字量(神秘的數)。相反,應該定義和使用各種符號常量。

   避免在代碼裡使用非平凡的文字量,即magic number。總是應該使用const或者枚舉來定義各種符號常量。如const double PI = 3.14159,enum { NUMBER=128 }

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.