在常數表達式中使用std::string
Constexpr 變數是現代C 的重要組成部分,為複雜表達式提供編譯時解析。然而,由於其嚴格的要求,在 constexpr 上下文中使用 std::string 歷來是有問題的。
在 C 11 中,嘗試定義常數 std::string,如提供的程式碼片段所示,結果在編譯錯誤中。解釋在於 std::string 的非平凡析構函數,它阻止它被視為文字類型。
C 20 和 C 17 解決方案
幸運的是,C 20 引入了解決這一困境的方法。如果確保 std::string 在常數求值結束之前被銷毀,則它在 constexpr 中使用變得有效。雖然原始查詢中的範例仍然無效,但諸如確定從非常量字串文字建立的 std::string 的大小(如答案中所示)之類的程式碼可以成功編譯。
除了 C 20 的增強,C 17 帶來了 std::string_view。這個類似字串的物件提供了對現有字元序列的不可變引用,而無需擁有或修改它們。如答案中所示範的,定義 constexpr std::string_view 解決了在常數表達式中使用字串的問題。
透過這些解決方案,C 20 和 C 17 都顯著增強了 constexpr 的表達能力和功能現代 C 編程。
以上是我可以在常數表達式中使用 std::string 嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!