constexpr 在 C 11 中可能嗎?
問題:
C 11能否確定是否表達式是編譯時常數表達式(constexpr)?
答案:
是的,可以使用以下技術根據此確定生成編譯時布爾值:
template<typename T> constexpr typename remove_reference<T>::type makeprval(T &&& t) { return t; } #define isprvalconstexpr(e) noexcept(makeprval(e))
此巨集使用noexcept 運算子檢查表達式e 是否為純右值常數表達式。如果 noexcept(makeprval(e)) 計算結果為 true,則表達式 e 為純右值常數表達式。
說明:
純右值常數表達式有一定的限制:
未宣告 makeprval 函數as noexcept,因此如果 e 是純右值常數表達式,則呼叫 makeprval(e) 將是常數表達式。因此,noexcept 運算子將傳回 true。
限制:
isprvalconstexpr 巨集有一些限制:
以上是C 11 能否確定表達式是否為編譯時常數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!