在 C 11 中使用 Constexpr 參數重載函數
在 C 11 中,無法基於 constexpr 參數重載函數會造成限制。無法定義具有相同簽章但不同 constexpr 狀態的函數限制了 constexpr 的潛力。例如,人們可能希望為 constexpr 參數提供一個 constexpr std::string 建構函數,並為非 constexpr 參數提供一個非 constexpr std::string 建構函數。
缺乏這種重載功能引發了一個問題:對於 C 11 是否可行支援基於 constexpr 參數的重載的實作還是會強制執行標準更新?
目前的 C 11 實作不允許基於 constexpr 參數的重載。此限制是有意實施的。
替代方案和注意事項
儘管缺乏 constexpr 重載,但仍然存在替代方案。一種選擇涉及使用模板。例如,要實作constexpr std::string 建構函式的功能,可以建立一個範本:
template<int n> static inline double pow(double x) { // Fast implementation of x ^ n, with n a compile time constant return ... }
但是,這種方法要求使用者根據n 是否為編譯來利用不同的函式呼叫時間常數,這對於庫函數來說可能不方便且不可預測。
潛在好處
基於constexpr參數啟用函數重載將提供幾個優點:
以上是以下是一些標題選項,重點關注可行性和潛在收益的問題: 選項 1(直接且簡潔): * C 11 可以基於 Constexpr 參數實現重載嗎? 選項2的詳細內容。更多資訊請關注PHP中文網其他相關文章!