看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《yehsd (急)》之銘言: : [再次感謝版友 adrianshum 提醒, 我應該說的詳細點] : 和這句, 有沒有矛盾點? : [我想說的是, ctor 是空的, 還是會有 default ctor, 這點如同 adrianshum : 所言. 如果在 instantiation 時指定了自訂的 ctor, compiler 就不會去 generate : default ctor. 所以 littleshan 所說的: constructor 是 compiler 幫你自動 : 呼叫的指的應該是 default ctor? 因為這個 ctor 才是 compiler 會自動呼叫的, : 希望我沒誤解 littleshan 所說的 ^^] 我覺得你這個人不錯, 雖然不太懂 C++,但是會唸書,也會想,以後會很強。 我覺得你不錯, 所以我現在願意花時間打字講些很基本的東西給你看, 首先,一「空的」函數,在經過最佳化以後是不會被呼叫的, 不管他是你自己手寫的,還是編譯器自動生成的都一樣, 這是非常基本非常常見非常簡單的最佳化, 也就是說你所謂那一百萬次的函數呼叫成本其實不存在。 : : 在 C 裡面你可能宣告了變數卻忘了初始化 : : C++ 的 constructor 正好可以避免這種情況 : 這是 C++的優點, 但是也有可能是雙面刃. 你不能這樣說話的, 你得告訴我另外一面是什麼? 不然這個句型太強大了,什麼都能套下去, 我可以說「C 的不用初始化是一個雙面刃」,或說「C 的速度是一個雙面刃」, 但是我不跟你講原因,你會不會覺得我很笑? C++ 出來的早,只是「建議你」初始化, 現在新出來的語言,幾乎都強迫你一定要初始化, 你看,C++ 很卑微的。 : : 的確有時候 C 比 C++ 快 (printf 比 cout 快是不爭的事實) : : 但也有許多 C++ 比 C 快的情況 (例:STL 的 sort 狂勝 C 的 qsort) : : 既然做法不一樣 那比這個也沒什麼意義可言 : 看到這邊, 我只能說我可能真的沒你那麼懂 C++, 小弟不才, : 用 C++ 開發一個比 C 寫出來還快的OS, 這個重責大任就交給比較懂的人囉. 現在懂的不多沒關係,你可以再多念一點, 如果你 CPPPL 真的念得很透的話,應該不會講出上面那些話, 使戳使挫在書裡面對 C++ 的效能提到很多了。 最後是跟程式無關的…… 自己書看不夠的時候,盡量少叫別人看書,感覺不太好,你知道我的意思。 一個人有料的時候,自己可能不會知道。 但是一個人沒料的時候,旁邊的人都看得很清楚。 -- To iterate is human, to recurse is divine. 遞迴只應天上有, 凡人該當用迴圈.   L. Peter Deutsch -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.160.108.87
tinlans:手寫的空 ctor 如果定義式放在 .cxx 檔裡,會不會呼叫就要 03/06 22:21
tinlans:看 compiler 跨編譯單元最佳化的支援能力;另外 virtual 03/06 22:22
tinlans:destructor 就算是空的其實要避掉呼叫動作不是那麼簡單。 03/06 22:22
tinlans:不過 compiler 自動產生的空 ctor 確實是很容易省略呼叫。 03/06 22:23
yoco315:學長你害大家都知道我沒料了 XD 03/06 22:24
tinlans:你應該只是懶得打更多字講細節吧,我幫忙補而已 XD 03/06 22:28