C 中的constexpr函式有什麼作用?

時間 2021-06-02 04:20:19

1樓:C十十20年

新標準不是這樣描述的,參見《C++程式設計精要教程》介紹的2017標準,primer好像是2011標準。其實質含義是,當呼叫該函式用常量作為實參時,編譯程式應盡量根據函式體計算出其返回值,該值若在編譯時能計算出來,它也是乙個作為返回值的常量。因此,這樣的函式和呼叫可被優化掉,而不存在於編譯產生的可執行程中。

具體能否優化掉不一定。而返回結果若是物件常量,被賦值給同型別的變數,則應優先呼叫具有移動語義的operator=進行賦值,因為用常量物件去賦值或呼叫,優先匹配&&定義的變數或形參。

2樓:stay

描述的應該是C++11剛出的時候,這時候constexpr函式確實看不出來有什麼太大的作用,基本等價於安全的普通函式巨集(拋開遞迴來說)

比如#define AddFive(a) (a + 5)constexpr

intAddFive

(inta)

雖然但是

在呼叫的地方直接把這固定值賦值給呼叫的物件這個做法本身就是不合適的,等價於magic number當然,C++14之後就有用多了,估計幾乎所有純函式都可以constexpr

C 內聯函式和constexpr函式可以在程式中定義不止一次,這個一般用在什麼時候?

楊個毛 用來讓你製造一堆weak symbol,然後一不小心試圖把兩個不同libstdc 版本的.o檔案鏈結在一起的時候死得不明不白的。 Pluto Hades 你們為什麼搞這麼複雜?inline關鍵字是在宣告的時候用的,不是在定義的時候寫。題主你把inline和函式體挪到頭檔案再試一次。另外,C ...

C 有提供像是 C 中 realloc 這樣的函式的新版本嗎?

自己實現可以使用從c那繼承過來的realloc,但是c 的new和allocator體系沒有類似的支援,這就導致了vector在擴容時必須申請一塊新的記憶體並複製,標準也是這樣要求的,就算是標準庫的作者想在底層用realloc去針對可平凡複製構造 析構的型別做這樣的優化也不行。我想c 不提供新的re...

C 中是否允許在函式中定義函式?

暗能量泡泡 C 不能支援直接在函式中定義函式。C 11通過支援Lambda函式 實際上是個匿名class的物件 來實現類似功能。其他方式可以使用函式中定義struct class的方式再定義其靜態成員函式的方式來模擬一樣的效果。 Johnny Wong 可以使用class struct的實現,它們支...