這是本系列的第一篇文章,我想它適合開始一些新的程式設計師都會遇到更多的基本問題。本系列以後的文章將解決日益複雜的自然的程式設計錯誤。
無論乙個程式設計師的經驗水平,錯誤發生,無論是通過知識的缺乏,乙個錯字,或一般的疏忽,知道哪些問題是最有可能引起麻煩,可以幫助減少他們可能帶來麻煩。雖然是無可取代的經驗和知識,良好的單元測試可以幫助捕捉這些之前把它們埋層之下的其他**!
許多c++程式設計師忘記,其實有兩個新的運營商刪除兩種形式:乙個標量版本,以及一系列的版本。
運算元是用於分配新的標量(非陣列)在堆中的資料。如果被分配的物件是乙個類型別物件的建構函式被呼叫。
foo* pscalar = new foo;
刪除運算元是用來摧毀乙個標量物件已使用新的運營商分配。如果物件被破壞是乙個類型別的物件的析構函式被呼叫。
刪除pscalar;
現在考慮下面的**片段:
foo*陣列= new foo [ 10 ];
這段**分配10 foo陣列。因為下標[ 10 ]設定int型別說明符之後,許多c++程式設計師不知道運算元新的[ ]被稱為做陣列分配而不是操作。運營商新的[ ]確保呼叫建構函式為每個物件被構造。
相反,刪除陣列,刪除運算子應用於
乙個***是由於乙個運算子,表示式,語句,或函式後仍然運算元,表達,陳述,或已完成的評價功能。
***是非常有用的:
x = 5;
賦值操作符改變了x的值永久的***。c++的其他運營商提供有用的***包括* =,= % =,+ /,=,=,< < =,> > =、=,=,|,^ =,和臭名昭著的+和-運算元。
然而,在c++裡操作的順序是不確定的幾個地方,這可能會導致不一致的行為。比如說呢。
無效的多(x,y)
國際main()
因為multiply()的函式引數的求值順序是不確定的,這可以列印30或36,這取決於x + x首先計算。
乙個涉及運營商略陌生人的例子:
int foo(x)
國際main()
由於對c++的操作符的運算元求值順序是不確定的(對大多數運營商也有少數例外),這也可以列印30或36,這取決於左或右運算元求值第一。
同時考慮下列化合物的表達:
如果(x = = 1 & + y = = 2)
/ /做某事
程式設計師的意圖可能是說「如果x為1和y前遞增的值是2,那麼做點什麼」。然而,如果x不等於1,c + +採用短路求值,這意味著+ y從未被評估!因此,你只會增加如果x的值為1,這可能不是程式設計師想要的!
乙個好的經驗法則是把任何導致***的運算子在它自己的宣告。
路由知識普及和經驗分享
流行的第三方路由韌體,主要有ddwrt,tomato,openwrt 當然還有其他一些更加小眾的版本,和很多從這三大韌體衍生出來的修改版韌體 當然,真正怎麼樣還需要大家親自去體驗,覺知此韌體要躬行 帖子有點長,沒有耐心的朋友可以無視,但是這絕對是我個人在恩山一年左右時間對這些韌體和韌體相關的一些東西...
知識 經驗 反思2
管理大師查爾斯 漢迪曾經在倫敦商學院教書。在培訓一些經理人的時候,他講了這麼一段話 你們不會把這次培訓看成什麼難忘的學習機會,除非它能幫助你們反思過去,理解從前的經驗。如果能達到這個目的,它才能幫助你們更好地解決將來出現的難題。漢迪的這一段話,包含三個重要的公式。最重要的是第乙個 經驗 反思 知識。...
知識 經驗 反省 2 ?
週末回老家了,火車上為了打發時間看了看 世界經理人 中的一篇文章,其中介紹了知識和經驗的關係,主要想說明的是反省的重要性。文章說的很對,如果不進行反省,那麼,5年甚至10年的工作經驗只不過是1年的工作經驗重複5次或10次,只有對經驗進行反省之後,才能形成知識,才能為以後的工作帶來參考價值。這樣的人才...