C++ 為什麼不把所有函式設定成虛擬函式?右手特別巨2021-05-26 01:03:37

1。有開銷,建議你分別寫一個虛擬函式,以及非虛擬函式,分別呼叫100w次對比看看。

2。virtual關鍵字能起到溝通的作用,讓人(包括你自己)在閱讀程式碼時就知道這個函式存在繼承關係,大概是什麼用途。全部都寫上virtual, 雖然不違反語法,但是起到了很好的迷惑誤導作用,跟錯誤的註釋性質差不多,比不寫註釋還要惡劣!

參考 美程式設計師槍擊4同事 竟因程式碼不寫註釋?

C++ 為什麼不把所有函式設定成虛擬函式?糖萌蘆2021-05-26 06:33:19

因為大部分方法不需要被派生類重寫,只有需要的才標virtual,還能起到告知作用。而且虛擬函式呼叫有重定向開銷,把虛擬函式限定在需要的方法上面,控制了虛擬函式帶來的開銷。

你不需要為你不使用的東西付出代價

只有java那種垃圾語言才會二話不說全部預設virtual,浪費又不明確。

C++ 為什麼不把所有函式設定成虛擬函式?冰冰2021-05-27 08:28:46

摘抄一段C++之父的採訪:

What were your major original design goal of C++? And what’s the most memorable part in the design of C++? 

Bjarne Stroustrup:

The major original (as well as current) design goals were to allow me to write maximally efficient systems’ code and control complexity, to write elegant and efficient code, to provide direct access to hardware and zero-overhead abstraction。 That’s three ways of saying essentially the same thing that I have used over the years

如果全部virtual, 明顯違反上面的design goal。

採訪原PDF:

https://www。

stroustrup。com/China-in

terview。pdf

C++ 為什麼不把所有函式設定成虛擬函式?馮Jungle2021-06-06 22:52:25

看到很多人說了虛擬函式會引入虛表和虛指標的開銷。

其實還有一些開銷,比如引入虛擬函式後,建構函式、解構函式、複製構造都不再是trivial的了,這部分的開銷也不少。

C++ 為什麼不把所有函式設定成虛擬函式?蕭涵2021-06-07 13:10:38

C++崇尚零開銷,虛擬函式會帶來空間和時間上的開銷。

如無必要,勿增實體。