在C 11 中,引入constexpr 作為函數的類型限定符引發了有關其與現有機制inline 的關係的問題用於內聯函數。本文研究了 constexpr 的含義以及它如何與內聯交互作用。
C 11 標準明確指出「constexpr 函式和 constexpr 建構子是隱式內聯的」。這意味著使用 constexpr 作為函數說明符也會隱式設定內聯說明符。因此,如果一個函數被宣告為 constexpr,它的行為就好像它具有內聯說明符。
這表示如果將非常量參數傳遞給對於constexpr 函數,編譯器仍會嘗試內聯函數,就像它被宣告為內聯一樣。這是因為 constexpr 函數需要滿足某些適合內聯的標準,例如簡單且不遞歸。
但是,需要注意的是,內聯函數說明符對單一定義規則 (ODR) 的影響比對內聯本身的影響更大。具有不同內聯限定符的函數可以有多個定義,而 constexpr 函數與內聯函數一樣,必須有一個定義。
雖然 constexpr 函數隱式暗示內聯,但內聯說明符的影響有限關於內聯決策。編譯器最終會根據各種因素(包括函數的大小和複雜性)來決定是否內聯函數。 Constexpr 函數最初設計為適合內聯,但隨後的放寬允許使用更複雜的 constexpr 函數。
以上是C 11 中 `constexpr` 如何與 `inline` 互動?的詳細內容。更多資訊請關注PHP中文網其他相關文章!