首頁 >後端開發 >C++ >為什麼我的 C 20 `constexpr` `std::vector` 和 `std::string` 編譯失敗?

為什麼我的 C 20 `constexpr` `std::vector` 和 `std::string` 編譯失敗?

Patricia Arquette
Patricia Arquette原創
2024-12-01 20:05:14742瀏覽

Why Are My C  20 `constexpr` `std::vector` and `std::string` Failing Compilation?

C 20 Constexpr 向量和字串不起作用?瞬態分配的故事

當嘗試建立 constexpr std::string 和 std::vector 物件時,您可能會遇到令人費解的編譯器錯誤。雖然使用最新支援的Visual Studio 版本,錯誤訊息聲稱「表達式必須具有常數值。」

問題

提供的程式碼利用:

但是,編譯器會抱怨,提示缺少細節。

此問題源自於 C 20 對 constexpr 分配的有限支援。具體來說,需要瞬時分配。這意味著在常數求值期間分配的任何記憶體都必須在求值完成之前釋放。

由於動態記憶體分配的性質,向量不能儲存為常數,因為它們的內存在求值後仍然存在。因此,出現了關於「指向常數求值期間分配的記憶體」的錯誤。

瞬態分配範例

雖然向量不能宣告為常數,但它們可以在具有瞬態分配的constexpr 函數中使用:

在此程式碼中,向量的記憶體是當f() 傳回時釋放,使分配暫時並允許在constexpr 函數中使用。

以上是為什麼我的 C 20 `constexpr` `std::vector` 和 `std::string` 編譯失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn