在常量表达式中使用 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中文网其他相关文章!