Re: [問卦] C++到底難學在哪裡

看板Gossiping作者時間1年前 (2023/03/05 12:07), 1年前編輯推噓13(15225)
留言42則, 21人參與, 1年前最新討論串2/16 (看更多)
※ 引述《iLeyaSin365 (365)》之銘言: : C++是物件導向,比C困難吧? : 打開Cpp語言的程式碼 : 我看到的不外乎質樸的for循環、 : 列印的語法、函數、參數。 : 雖然覺得C++看來看去就是類似的感覺,甚至比javascripts感覺更簡陋一些。 : 好像會陡然上升墜五里霧。 : 如果拿有C語言體質的rust相比, : Rust看起來好像更深奧(更多概念)。 : 到底C++難在哪? : 因為C++有太多一不小心就會出事的細節。 舉個常見的例子: 今天有個vector<T> 你從vector拿T&出來用的同時,另外一條thread正在push_back到vector裡,碰巧觸發vec tor的array resize,原本存在heap的資料統統copy到新的memory address,你的T&就會 拿到垃圾值,seg fault油然而生。 C++多的是這種應注意而未注意的小細節,連老手寫都會忘記,更何況是新手? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 71.230.161.115 (美國) ※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1677989222.A.9A5.html ※ 編輯: muse87131 (71.230.161.115 美國), 03/05/2023 12:08:01

03/05 12:08, 1年前 , 1F
C++難在指標吧 我覺得指標頗麻煩
03/05 12:08, 1F

03/05 12:08, 1年前 , 2F
每次看都覺得又有其他想法
03/05 12:08, 2F

03/05 12:08, 1年前 , 3F
講到這個我就氣 一開始真的找不到為什麼
03/05 12:08, 3F

03/05 12:09, 1年前 , 4F
指標c 就有了....
03/05 12:09, 4F

03/05 12:10, 1年前 , 5F
也可能我學的不是很全吧 我是自己拿書來
03/05 12:10, 5F

03/05 12:10, 1年前 , 6F
看的
03/05 12:10, 6F

03/05 12:10, 1年前 , 7F
你這是race condition 啊
03/05 12:10, 7F
就算沒有race也會發生。單一thread拿reference然後push_back也會發生這種事。 ※ 編輯: muse87131 (71.230.161.115 美國), 03/05/2023 12:11:36

03/05 12:13, 1年前 , 8F
記憶體不夠用喔!?跟日本買吧~~
03/05 12:13, 8F

03/05 12:14, 1年前 , 9F
是不會用lock
03/05 12:14, 9F

03/05 12:14, 1年前 , 10F
工啥小啦
03/05 12:14, 10F

03/05 12:14, 1年前 , 11F
處理器不是記憶體喔~~
03/05 12:14, 11F

03/05 12:17, 1年前 , 12F
等等你的vector 動不動就resize?
03/05 12:17, 12F
vector滿了就會resize成2x容量。如果大量push_back,初期會觸發不少resize。

03/05 12:17, 1年前 , 13F
對於STL的reference最好還是用STL自帶
03/05 12:17, 13F

03/05 12:17, 1年前 , 14F
的 不要自己去取址
03/05 12:17, 14F
我寫過for (T& : vector)然後就爆了…因為這個for裡面還在push_back

03/05 12:19, 1年前 , 15F
要速度快需要注意的點就多
03/05 12:19, 15F

03/05 12:23, 1年前 , 16F
程式寫得好要飯要到老
03/05 12:23, 16F

03/05 12:26, 1年前 , 17F
為什麼不好好讀documentation呢?
03/05 12:26, 17F
所以你讀了哪個documentation? ※ 編輯: muse87131 (71.230.161.115 美國), 03/05/2023 12:31:26

03/05 12:31, 1年前 , 18F
你在for迴圈還去動陣列 在哪裡都會出事吧
03/05 12:31, 18F

03/05 12:32, 1年前 , 19F
python也會啊 結果一直加element 一直爽
03/05 12:32, 19F

03/05 12:36, 1年前 , 20F
官方文件啊 不就有一欄告訴你哪些造成
03/05 12:36, 20F

03/05 12:37, 1年前 , 21F
會 iterator invalidation
03/05 12:37, 21F

03/05 12:46, 1年前 , 22F
不太懂,你是說大量push_back會讓vect
03/05 12:46, 22F

03/05 12:46, 1年前 , 23F
or invalid??
03/05 12:46, 23F

03/05 12:47, 1年前 , 24F
還是你把iterator當成pointer在用?
03/05 12:47, 24F

03/05 13:17, 1年前 , 25F
所以我都用vector<T*>
03/05 13:17, 25F

03/05 13:52, 1年前 , 26F
C++那個template才真的很頭痛XD
03/05 13:52, 26F

03/05 14:06, 1年前 , 27F
你們說的 我怎麼都不懂
03/05 14:06, 27F

03/05 14:18, 1年前 , 28F
你這種用法我通稱 用法習慣不好
03/05 14:18, 28F

03/05 14:19, 1年前 , 29F
根本埋雷給別人
03/05 14:19, 29F

03/05 14:29, 1年前 , 30F
確實蠻容易發生的 如果你一定要這樣寫
03/05 14:29, 30F

03/05 14:30, 1年前 , 31F
的話 但理解到這個程度應該也知道要怎
03/05 14:30, 31F

03/05 14:30, 1年前 , 32F
麼避免吧
03/05 14:30, 32F

03/05 15:50, 1年前 , 33F
這就沒學好資料結構啊 學過理論都知道
03/05 15:50, 33F

03/05 15:51, 1年前 , 34F
vector的標準實作一定有resize
03/05 15:51, 34F

03/05 15:52, 1年前 , 35F
就很多人自以為學校教的東西沒屁用
03/05 15:52, 35F

03/05 15:52, 1年前 , 36F
然後出去寫出一堆bug直接炸裂
03/05 15:52, 36F

03/05 15:53, 1年前 , 37F
請說明C++的多型
03/05 15:53, 37F

03/05 16:41, 1年前 , 38F
我看了什麼推文?
03/05 16:41, 38F

03/06 18:08, 1年前 , 39F
哪國語言不會這樣?rust就不會 ㄏㄏ
03/06 18:08, 39F

03/07 21:29, 1年前 , 40F
要幹這種事情麻煩包裝成get, set
03/07 21:29, 40F

03/07 21:29, 1年前 , 41F
然後加上thread lock,不然出錯真
03/07 21:29, 41F

03/07 21:29, 1年前 , 42F
的很麻煩。
03/07 21:29, 42F
文章代碼(AID): #1a11Lccb (Gossiping)
討論串 (同標題文章)
文章代碼(AID): #1a11Lccb (Gossiping)