[問題] 關於inline的問題......

看板C_and_CPP (C/C++)作者 (meow)時間13年前 (2013/01/15 23:37), 編輯推噓1(1014)
留言15則, 4人參與, 最新討論串1/1
我了解尚未綁定的virtual函數無法被inline 但是中文版的 Effective C++ 條款30中有一句話 "所有對virtual函数的调用也都會使inline落空" 卻讓我有點搞糊塗了 難道說類似這樣的程式碼不能被inline嗎? class Base { public: void inline_func() { ++counter_; virtual_func(); } //can not be inlined??! private: int counter_; virtual void virtual_func() = 0; }; 雖然inline_func()當中呼叫了virtual函數 但是編譯器要將對 inline_func() 的呼叫直接置換為 {++counter_; virtual_func();} 應該不會有困難才對吧? 畢竟編譯期尚未決定的應該是 "virtual_func()到底指向哪個函數" 這件事 而不是 "我想要呼叫virtual_func()" 的這個動作不是嗎? 還是說我把這句話的文意理解錯了......XD ====================================== 另外一個小小的問題是 如果我這樣寫: int a; inline int &reference_of_a() {return a;} 那麼這兩行: a = 100; reference_of_a() = 100; 編譯過後就會是完全一樣的嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.176.10.104

01/16 04:53, , 1F
inline:若編譯期無法綁定,則無法inline,不是完全
01/16 04:53, 1F

01/16 04:54, , 2F
沒可能,但是一般情況下無法inline。
01/16 04:54, 2F

01/16 08:51, , 3F
但是 inline_func() 本身並不是一個虛函數啊 這樣也不行嗎
01/16 08:51, 3F

01/16 09:47, , 4F
inline_func可以inline但是virtual_func不行
01/16 09:47, 4F

01/16 10:32, , 5F
所以那句話不是說 "調用虛函數的函數" 不能inline 而是被
01/16 10:32, 5F

01/16 10:34, , 6F
調用的虛函數不能inline囉?(但是這樣解釋又像是廢話XD)
01/16 10:34, 6F

01/16 17:28, , 7F
gcc編譯的時候開-Winline就可以讓你知道你宣告inline
01/16 17:28, 7F

01/16 17:29, , 8F
編譯器卻跟你說他沒辦法inline. VC也有類似的東西
01/16 17:29, 8F

01/16 17:29, , 9F
這應該比dump asm簡單一點
01/16 17:29, 9F

01/16 17:29, , 10F
至於理論上的說法,就是如devilphoenix說的
01/16 17:29, 10F

01/16 17:30, , 11F
另外,會問這問題的人通常...er... inline用太多了=P
01/16 17:30, 11F

01/16 17:41, , 12F
只是單純好奇....我自己是不會inline超過兩行的函式XD
01/16 17:41, 12F

01/16 17:42, , 13F
實際上用過的inline幾乎都是直接把getter寫在*.h檔造成的
01/16 17:42, 13F

01/16 17:43, , 14F
我再開-Winline試試看吧 感謝指點^^
01/16 17:43, 14F

01/16 17:46, , 15F
記得-O要設3以上 不然很多inline會被跳過
01/16 17:46, 15F
文章代碼(AID): #1GzNV6Dd (C_and_CPP)
文章代碼(AID): #1GzNV6Dd (C_and_CPP)