C 20 constexpr Vector 和String 不工作
在此問題中,程式設計師嘗試建立建立d::string 和texprstd 的conss
在此問題中,程式設計師嘗試建立定義::string 和texprstd 的conss>此問題::向量,但遇到編譯器錯誤,指出表達式必須具有常數值。儘管使用最新的 Microsoft Visual Studio 2019 版本,該版本支援 constexpr 字串和向量,但仍出現此問題。
問題說明此錯誤源自於有限的 constexpr 分配支援C 20,僅允許瞬時分配。瞬時分配要求在常數求值結束時完全釋放已分配的記憶體。
無效程式碼範例int main() { constexpr std::vector<int> v = {1, 2, 3}; }
這裡,v 的分配仍然存在,使其成為非暫時性的。編譯器正確地產生錯誤,指示表達式未求值為常數,因為 v 在常數求值期間保留堆分配。
有效程式碼範例constexpr int f() { std::vector<int> v = {1, 2, 3}; return v.size(); } static_assert(f() == 3);
以上是為什麼我的 C 20 `constexpr` `std::vector` 和 `std::string` 不工作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!