Re: [問卦] C++到底難學在哪裡
※ 引述《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
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
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
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
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
03/05 12:17, 12F
vector滿了就會resize成2x容量。如果大量push_back,初期會觸發不少resize。
推
03/05 12:17,
1年前
, 13F
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
03/05 12:26, 17F
所以你讀了哪個documentation?
※ 編輯: muse87131 (71.230.161.115 美國), 03/05/2023 12:31:26
推
03/05 12:31,
1年前
, 18F
03/05 12:31, 18F
→
03/05 12:32,
1年前
, 19F
03/05 12:32, 19F
→
03/05 12:36,
1年前
, 20F
03/05 12:36, 20F
→
03/05 12:37,
1年前
, 21F
03/05 12:37, 21F
推
03/05 12:46,
1年前
, 22F
03/05 12:46, 22F
→
03/05 12:46,
1年前
, 23F
03/05 12:46, 23F
→
03/05 12:47,
1年前
, 24F
03/05 12:47, 24F
推
03/05 13:17,
1年前
, 25F
03/05 13:17, 25F
推
03/05 13:52,
1年前
, 26F
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
03/05 15:51, 34F
→
03/05 15:52,
1年前
, 35F
03/05 15:52, 35F
→
03/05 15:52,
1年前
, 36F
03/05 15:52, 36F
→
03/05 15:53,
1年前
, 37F
03/05 15:53, 37F
噓
03/05 16:41,
1年前
, 38F
03/05 16:41, 38F
推
03/06 18:08,
1年前
, 39F
03/06 18:08, 39F
→
03/07 21:29,
1年前
, 40F
03/07 21:29, 40F
→
03/07 21:29,
1年前
, 41F
03/07 21:29, 41F
→
03/07 21:29,
1年前
, 42F
03/07 21:29, 42F
討論串 (同標題文章)