了解 constexpr 和动态内存分配与 C 20 中的 std::vector 和 std::string 的不兼容性
尽管有文档表明支持对于 Microsoft Visual Studio 2019 版本中的 constexpr std::string 和 std::vector从 16.11.4 开始,用户在尝试使用 constexpr 创建这些对象时可能会遇到错误。其原因在于 C 20 中对 constexpr 分配的支持有限。
在 C 20 中,在 constexpr 求值期间允许瞬态分配。这意味着在常量求值期间分配的内存必须在其结论时完全释放。然而,向量和字符串动态分配内存,这可能会超出常量求值的范围,从而违反了此规则。
错误消息“表达式必须具有常量值”表明编译器无法保证分配的内存内存将在 constexpr 计算结束时释放。因此,尝试创建 constexpr std::vector 和 std::string 对象会失败。
相反,std::array 可以与 constexpr 一起使用,因为它不需要动态内存分配并且其生命周期得到保证仅限于恒定的评估周期。
要解决此问题,请确保仅在其生命周期短暂时尝试创建 constexpr 对象,这意味着它们在结束时完全释放不断的评价。此限制限制了 constexpr 上下文中动态内存分配的使用。
以上是为什么我不能在 C 20 中将 `constexpr` 与 `std::vector` 和 `std::string` 一起使用?的详细内容。更多信息请关注PHP中文网其他相关文章!