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