Re: [問題] 問一段code (virtual function)
※ 引述《neville123 (nk)》之銘言:
: virtual void *emitFunctionStub(const Function* F, void *Target,
: JITCodeEmitter &JCE) {
: assert(0 && "This target doesn't implement emitFunctionStub!");
: return 0;
: }
: 最近在看code的時候, 覺得這段很奇怪, 想請問為什麼function body裡面什麼都沒做呢?
: 因為他傳了一些參數進來不是嗎? 另外也想問一下 assert以字串當作參數是什麼用法呢?
: 謝謝~
1. 這裡的關鍵字是 virtual
也就是說這個 class 的設計者期望對它的使用是繼承下來
把這個函式實作起來才拿來用
因此寫成這樣 當繼承它的人沒有實作時就會噴出這個錯誤訊息出來
2. assert 這裡其實不是拿字串當作參數
注意到前面有個 0 && 你可以當成 false &&
因此這個 assert 一定失敗
也就是在 debug build 當中執行到這一行就會炸給你看
之所以要寫個字串在那裡的原因是
assert 失敗時會吐出你是什麼式子判斷失敗
(而且是原文照搬; 內部使用的技巧我在 #1EV01Wpd 這篇說過, 這裡表過不提)
因此當在這裡炸掉時你就會炸掉的訊息當中看到類似
assert failed: 0 && "This target doesn't implement emitFunctionStub!"
這樣的文字
於是你就可以很清楚問題出在這裡
3. 所以雖然我個人偏好把這個函式寫成 pure virtual 強制使用者實作
(以此例來說就是
virtual void *emitFunctionStub(const Function* F, void *Target,
JITCodeEmitter &JCE) = 0;
寫成這個樣子, 而且這樣當沒實作的時候一編譯就會炸掉, 不用到執行)
但這種寫法也不失為是一個提醒使用者的方式就是了
--
'Oh, Harry, don't you see?' Hermione breathed. 'If she could have done
one thing to make absolutely sure that every single person in this school
will read your interview, it was banning it!'
---'Harry Potter and the order of the phoenix', P513
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.230.62
推
01/21 11:33, , 1F
01/21 11:33, 1F
→
01/21 11:33, , 2F
01/21 11:33, 2F
→
01/21 11:46, , 3F
01/21 11:46, 3F
推
01/21 12:49, , 4F
01/21 12:49, 4F
→
01/21 13:15, , 5F
01/21 13:15, 5F
推
01/21 13:47, , 6F
01/21 13:47, 6F
推
01/21 15:58, , 7F
01/21 15:58, 7F
→
01/21 15:59, , 8F
01/21 15:59, 8F
→
01/21 16:02, , 9F
01/21 16:02, 9F
推
01/21 16:26, , 10F
01/21 16:26, 10F
→
01/21 16:27, , 11F
01/21 16:27, 11F
→
01/21 16:27, , 12F
01/21 16:27, 12F
推
01/21 17:19, , 13F
01/21 17:19, 13F
→
01/21 18:42, , 14F
01/21 18:42, 14F
推
01/21 20:03, , 15F
01/21 20:03, 15F
→
01/21 20:05, , 16F
01/21 20:05, 16F
→
01/21 20:06, , 17F
01/21 20:06, 17F
→
01/21 20:07, , 18F
01/21 20:07, 18F
→
01/21 20:44, , 19F
01/21 20:44, 19F
→
01/23 01:36, , 20F
01/23 01:36, 20F
→
01/23 19:23, , 21F
01/23 19:23, 21F
→
01/23 19:24, , 22F
01/23 19:24, 22F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):