怎么調(diào)用類的成員函數(shù) 什么是常量函數(shù)?
什么是常量函數(shù)?很多人忽略了語義定義和優(yōu)化之間的關(guān)系。例如,RVO(返回值優(yōu)化),盡管大多數(shù)都支持它,但在語義上,仍然有一個復制構(gòu)造函數(shù)。經(jīng)過優(yōu)化后,編譯后的代碼實際上永遠不會運行copy構(gòu)造函數(shù),但
什么是常量函數(shù)?
很多人忽略了語義定義和優(yōu)化之間的關(guān)系。
例如,RVO(返回值優(yōu)化),盡管大多數(shù)都支持它,但在語義上,仍然有一個復制構(gòu)造函數(shù)。經(jīng)過優(yōu)化后,編譯后的代碼實際上永遠不會運行copy構(gòu)造函數(shù),但是如果沒有copy函數(shù),編譯器仍然會報告錯誤。因為在語義上,復制構(gòu)造函數(shù)是被調(diào)用的。
例如,TCO(tail call optimization),雖然您編寫了一個遞歸函數(shù)(tail call recursive),但在語義上,仍然會有函數(shù)調(diào)用,盡管實際編譯的代碼不會產(chǎn)生堆棧溢出。但這并不能保證。
類似地,常量折疊也是一種優(yōu)化技術(shù),它不能再在語義上保證運行時常量。一個合法的編譯器根本無法進行這種優(yōu)化。
@考古學家關(guān)于數(shù)千英里冰的例子展示了編譯器常量的例子。從語義上講,constexpr函數(shù)調(diào)用是在編譯時執(zhí)行的,而不是常量折疊優(yōu)化的效果。