PTT推薦

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

看板Gossiping標題Re: [問卦] C++到底難學在哪裡作者
muse87131
()
時間推噓13 推:15 噓:2 →:25

※ 引述《iLeyaSin365 (365)》之銘言:
: C++是物件導向,比C困難吧?
: 打開Cpp語言的程式碼
: 我看到的不外乎質樸的for循環、
: 列印的語法、函數、參數。
: 雖然覺得C++看來看去就是類似的感覺,甚至比javascripts感覺更簡陋一些。
: 好像會陡然上升墜五里霧。
: 如果拿有C語言體質的rust相比,
: Rust看起來好像更深奧(更多概念)。
: 到底C++難在哪?
:

因為C++有太多一不小心就會出事的細節。

舉個常見的例子:

今天有個vector<T>

你從vector拿T&出來用的同時,另外一條thread正在push_back到vector裡,碰巧觸發vector的array resize,原本存在heap的資料統統copy到新的memory address,你的T&就會拿到垃圾值,seg fault油然而生。

C++多的是這種應注意而未注意的小細節,連老手寫都會忘記,更何況是新手?



--

※ PTT 留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 71.230.161.115 (美國)
PTT 網址
※ 編輯: muse87131 (71.230.161.115 美國), 03/05/2023 12:08:01

s505015 03/05 12:08C++難在指標吧 我覺得指標頗麻煩

s505015 03/05 12:08每次看都覺得又有其他想法

Xaymaca 03/05 12:08講到這個我就氣 一開始真的找不到為什麼

apsol 03/05 12:09指標c 就有了....

s505015 03/05 12:10也可能我學的不是很全吧 我是自己拿書來

s505015 03/05 12:10看的

gino0717 03/05 12:10你這是race condition 啊

就算沒有race也會發生。單一thread拿reference然後push_back也會發生這種事。

※ 編輯: muse87131 (71.230.161.115 美國), 03/05/2023 12:11:36

kingstongyu 03/05 12:13記憶體不夠用喔!?跟日本買吧~~

mdkn35 03/05 12:14是不會用lock

nowitzki0207 03/05 12:14工啥小啦

kingstongyu 03/05 12:14處理器不是記憶體喔~~

mdkn35 03/05 12:17等等你的vector 動不動就resize?

vector滿了就會resize成2x容量。如果大量push_back,初期會觸發不少resize。

gn01642884 03/05 12:17對於STL的reference最好還是用STL自帶

gn01642884 03/05 12:17的 不要自己去取址

我寫過for (T& : vector)然後就爆了…因為這個for裡面還在push_back

abcd5566 03/05 12:19要速度快需要注意的點就多

kingstongyu 03/05 12:23程式寫得好要飯要到老

flash5408 03/05 12:26為什麼不好好讀documentation呢?

所以你讀了哪個documentation?

※ 編輯: muse87131 (71.230.161.115 美國), 03/05/2023 12:31:26

mdkn35 03/05 12:31你在for迴圈還去動陣列 在哪裡都會出事吧

mdkn35 03/05 12:32python也會啊 結果一直加element 一直爽

flash5408 03/05 12:36官方文件啊 不就有一欄告訴你哪些造成

flash5408 03/05 12:37會 iterator invalidation

horseface 03/05 12:46不太懂,你是說大量push_back會讓vect

horseface 03/05 12:46or invalid??

horseface 03/05 12:47還是你把iterator當成pointer在用?

neigence 03/05 13:17所以我都用vector<T*>

kindaichitom 03/05 13:52C++那個template才真的很頭痛XD

vuncent 03/05 14:06你們說的 我怎麼都不懂

CIDgreen 03/05 14:18你這種用法我通稱 用法習慣不好

CIDgreen 03/05 14:19根本埋雷給別人

friends29 03/05 14:29確實蠻容易發生的 如果你一定要這樣寫

friends29 03/05 14:30的話 但理解到這個程度應該也知道要怎

friends29 03/05 14:30麼避免吧

orthogonal 03/05 15:50這就沒學好資料結構啊 學過理論都知道

orthogonal 03/05 15:51vector的標準實作一定有resize

orthogonal 03/05 15:52就很多人自以為學校教的東西沒屁用

orthogonal 03/05 15:52然後出去寫出一堆bug直接炸裂

GABA 03/05 15:53請說明C++的多型

nennykkk 03/05 16:41我看了什麼推文?

lturtsamuel 03/06 18:08哪國語言不會這樣?rust就不會 ㄏㄏ

henrylin8086 03/07 21:29要幹這種事情麻煩包裝成get, set

henrylin8086 03/07 21:29然後加上thread lock,不然出錯真

henrylin8086 03/07 21:29的很麻煩。