c++ 邏輯判斷的順序是從左向右的。conditiona&&conditionb 與 conditionb&&conditiona並不一定等價。
舉個例子:
void insertsort(vector&arr, int length)
arr[j + 1] = key;
}}
由於j是int型別,所以在key==5的那次迴圈裡,j最終會變成-1,設j>=0為conditiona arr[j]arr[-1],會報出 out_of_range的異常,解決方案1:按這個例子來編寫ab順序,解決方案b是將j設定為size_t型別。
在非容器操作中,則是另一種情況:
void insertsort(int arr, int length)
arr[j + 1] = key;
}}
假設將j設定為size_t型別,則由於j==0的時候進行j--;返回乙個無符號整形最大值,這種原生陣列越界c++甚至不會給出錯誤提示,算是很隱蔽的bug。
總結:1:在編寫程式的時候,為了避免錯誤,盡可能的使用stl容器
2:進行迴圈操作的時候,明確自己的意圖;如果是以下標為0時作為出口,則盡量使用有符號型別。
最近遇到的一些坑坑
1.未初始化 因為php語言是弱型別語言,不需要宣告變數型別,也不需要初始化值,所以經常對變數直接用,也不初始化。在php中這種做法不會造成致命錯誤,但是不初始化的這種思路會出問題。專案中經常要寫一些指令碼來統計業務的增長。增量的計算是今天基於前一天的增長,如果前一天的總量資料計算失敗,如何計算增量...
python 遇到的一些坑
lst 1,2,4 print lst.iter next 列印出來的是 1 print lst.iter next 列印出來的是 1 呼叫 iter 方法的時候,生成乙個迭代器物件 如上,第二次呼叫,先生成物件,然後返回的是該物件的第乙個值 第二次和第一次列印的是兩個不同的例項的next 方法,但...
安裝Ubuntu遇到的一些坑
用u盤做啟動盤安裝ubuntu其實很容易,網上到處都是教程。但對顯示卡顯示問題,會出現開機黑屏的情況,故將解決方法記錄下來,以做備忘。配置 神船,顯示卡gtx1060。1 開機,按f7選擇u盤啟動。進入grub介面。2 按e編輯開機指令,在quite splash並在後面加上nomodeset,按f...