Re: [討論] 面試有鑑別度的問題??

看板C_and_CPP作者 (CA)時間11年前 (2013/01/08 02:52), 編輯推噓13(13025)
留言38則, 18人參與, 最新討論串4/14 (看更多)
: 推 xvid:這篇有好心人願意解答嗎? 01/08 00:5 我是斗M,快來鞭我 ._./ ※ 引述《littleshan (我要加入劍道社!)》之銘言: : 標題: Re: [討論] 有鑑別度的問題?? : 時間: Mon Jan 7 00:13:59 2013 : : 隨便想的幾個題目 : : 1. 若在 class 中定義了 destructor,則通常還需要定義另外兩個 function。 : 為什麼? copy assignment operator 和 copy constructor 如果有需要自訂解構行為通常也會影響到 copy 語意 不過因為 C++ 夭壽複雜的規則,有時也會有例外 : 2. mutable 這個關鍵字應該用在什麼地方? 被 mutable 修飾的成員即使在 const method 裡也可以被修改 這跟 volitale 一樣是不太常用的 cv 修飾字 用途嘛 ... 有時候你會需要在 const method 重用 non-const 版本 不過我個人是會避開就是了 : 3. 為什麼 C++ 有四種不同的 cast operator? static_cast: 顯式轉型(e.g.: 大轉小,有號無號 ... etc.) const_cast: 去掉 CV 修飾字 dynamic_cast: 向下轉型,失敗會是 nullptr reinterpret_cast: 以上三種以外的情況用這種,但後果要看 compiler 不是不好,很多時候只能這麼轉,像是 function pointer 不同場合用不同的 cast,用 grep 比較好找(?) : 4. exception 有什麼優點和缺點? 戰文。 .... 雖然現在的普世價值觀是 exception > error code,但仍有一票人 不喜歡 C++ exception,像是 Joel 曾寫一篇 blog 批評 C++ exception 優點是它可以把錯誤處理的程式碼分開,較為清晰好讀,也較好維護 缺點是 ... 嗯,只講 C++ 好了 1. 你要懂 exception-safety 然後你就要知道 RAII 知道為什麼你不可以在資源回收或 swap 時丟 exception 以及思考你要採取哪種保證 2. C++ 的 exception 沒有 frame stack 資訊 苦命地開 debugger 吧 3. 過 multithread 會爆炸 你要在 thread 邊界接下來 4. C++ 的 ABI 沒有標準 所以你可能要在 module 邊界接下來轉成 error code : 5. C++ 提供多重繼承,但 C# 或 Java 都採用 interface 與單一繼承。 : 允許多重繼承有什麼缺點? 最明顯的問題是可能會出現鑽石狀繼承圖 Java 所有物件都繼承自 Object,要是能多重繼承,鑽石就來了 C++ 讓使用者自已解決 好處是設計自由,衍生出如 policy-based design 等手法 但壞處是你要處處小心不要炸了自已的腳,還要記得用 virtual inheritance 另外 C++ 很鳥的地方是多重繼承後的指標,在大部分的 compiler 上會有 offset 比方說 class C: public A, public B {}; C * c = new C; A * a = c; B * b = c; 指標的值,b 會和 c 不一樣,但是 b == c 是 true 這代表什麼,代表存在陣列裡的多型指標都不可信 因為陣列需要計算指標的 offset : 6. 為什麼我們要避免使用 global variable? : Singleton 是 global variable 嗎?為什麼? 一個非 const 變數存在的 context 越大,它就越難掌控 你很難一眼看出來哪些程式碼依賴這個變數 還有最重要的 multithreading 同步問題 關於 Singleton,還是戰文 我的看法是,這東西就是包裝精美的全域變數 全域變數有的缺點它全都有,只不過它讓你有方法補救 在 C++ 它的重點有二: 1. 正確解構順序 一般來說沒什麼難的,但如果你有用到 dll ... 2. 在 multithread 環境正確初始化 C++ 的 memory model 其實沒考慮到 thread 所以如果在進入 multithread 之後才想要初始化 那祝你好運 :) 好好的一個人,何苦學 C++? -- 自High筆記(半荒廢) http://legnaleurc.blogspot.com/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.198.231 ※ 編輯: legnaleurc 來自: 114.32.198.231 (01/08 03:02)

01/08 03:08, , 1F
好文
01/08 03:08, 1F

01/08 03:09, , 2F
push
01/08 03:09, 2F

01/08 08:30, , 3F
2. 的話有時會出現在前人介面設計不好時, 為了銜接的
01/08 08:30, 3F

01/08 08:30, , 4F
一時之計
01/08 08:30, 4F

01/08 08:47, , 5F
推 ~
01/08 08:47, 5F

01/08 09:04, , 6F
第五題補充 http://ideone.com/HguTi3
01/08 09:04, 6F

01/08 09:16, , 7F
6. 可以考慮 pthread_once()
01/08 09:16, 7F

01/08 09:36, , 8F
推!
01/08 09:36, 8F

01/08 10:10, , 9F
抖M大大,敝公司最近召募RD,有沒有興趣來聊一聊 (無誤
01/08 10:10, 9F

01/08 10:11, , 10F
推 最後一句中肯Q^Q 我開始懷疑我是不是m了XDD
01/08 10:11, 10F

01/08 11:27, , 11F
mutable在get funciton還蠻可能用到的....
01/08 11:27, 11F

01/08 11:29, , 12F
如果你的class有用caching....
01/08 11:29, 12F

01/08 12:06, , 13F
01/08 12:06, 13F

01/08 13:25, , 14F
推!感謝解答
01/08 13:25, 14F

01/08 15:46, , 15F
@loveme00835 感謝補充,需要虛擬繼承的例子
01/08 15:46, 15F

01/08 15:46, , 16F
@littleshan 謝謝,不過我還沒畢業 XD
01/08 15:46, 16F

01/08 23:11, , 17F
打擾 關於第5點內文: "陣列裡的多型指標都不可信"
01/08 23:11, 17F

01/08 23:12, , 18F
多型指標都不可信 可以理解 可是在陣列裡不太懂意思
01/08 23:12, 18F

01/08 23:14, , 19F
能不能給個因為這樣邏輯錯誤的例子 @_@"
01/08 23:14, 19F

01/08 23:18, , 20F
(補充下意思好了:是指說這樣會導致陣列操作會有意外發生?
01/08 23:18, 20F

01/08 23:26, , 21F
是說像這種 http://ideone.com/7WYZfl 情況的用法有問題?
01/08 23:26, 21F

01/08 23:47, , 22F
重點是你不知道 a[1] 的位址是不是偏移後的 B *
01/08 23:47, 22F

01/08 23:48, , 23F
不是多重繼承"或"陣列,是多重繼承"且"陣列的問題
01/08 23:48, 23F

01/09 00:02, , 24F
好文必須推
01/09 00:02, 24F

01/09 00:15, , 25F
推:)
01/09 00:15, 25F

01/09 00:43, , 26F
喔喔 以這為例: http://ideone.com/clone/7WYZfl 是指說
01/09 00:43, 26F

01/09 00:43, , 27F
這會因為多重繼承的緣故 使得縱使同樣從d轉來的a[0] a[1]
01/09 00:43, 27F

01/09 00:43, , 28F
也沒辦法確認為同個實體 從而造成陣列應用上的困擾這樣?
01/09 00:43, 28F

01/09 00:44, , 29F
抱歉.. 網址更正下: http://ideone.com/5BVkto
01/09 00:44, 29F

01/09 12:28, , 30F
補充:mutable最常用在包含在class內的mutex member
01/09 12:28, 30F

01/09 17:16, , 31F
好好的人為什麼要學 C++ LOL
01/09 17:16, 31F

01/10 13:34, , 32F
Joel 戰的是 Java 的 Exception 吧
01/10 13:34, 32F

01/10 15:13, , 33F
再回去翻一下他的文章,發現他並不只指 C++
01/10 15:13, 33F

01/10 15:14, , 34F
感謝指正
01/10 15:14, 34F

01/11 05:12, , 35F
第一次聽到mutuble @@ 想請問是正當使用的修飾詞 還是應
01/11 05:12, 35F

01/11 05:12, , 36F
該避開使用?
01/11 05:12, 36F

01/12 18:35, , 37F
當用則用吧
01/12 18:35, 37F

01/13 00:09, , 38F
ok thx :D
01/13 00:09, 38F
文章代碼(AID): #1Gwnc65U (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 4 之 14 篇):
文章代碼(AID): #1Gwnc65U (C_and_CPP)