首页 > 解决方案 > 从 const std::string& 移动到 std::string_view 时的向后兼容性考虑?

问题描述

const std::string&我维护了一个经常在其 API 中使用参数的 C++ 库。但是,我收到了一些用户请求切换到std::string_view以帮助实现当前 API 无法实现的效率。

我正在考虑简单地将所有const std::string&参数实例替换为std::string_view(可能使用验证std::string_view可用的功能检查)。这会破坏我的任何用户的向后兼容性吗?我尝试了简单的替换,它似乎没有破坏我的代码或测试中的任何内容,但这当然不是一个详尽的检查。

我确实意识到这会破坏一些取决于我的库的确切函数签名的代码。为了简单起见,假设我不允许用户依赖于我的函数的确切类型签名/参数。

标签: c++backwards-compatibilitystring-view

解决方案


我曾尝试在自己的代码中多次替换,但以下其中一项总是让我感到困惑std::string const&std::string_view

  • std::string_view从不拥有,因此如果您的任何std::string基于 - 的代码出于生命周期的原因必须拥有字符缓冲区,则该部分代码无法转换为 use std::string_view。这些问题可能很微妙,所以应该小心。
  • 基于第一点,任何需要所有权/std::string使用的代码都意味着您在完全使用时可能获得的效率提升std::string_view可能无法完全实现。
  • 如果您依赖以空字符结尾的字符串,那么std::string_view这不是一个好的选择。密切注意可能需要char const*参数的任何函数,其中隐含假设字符缓冲区以'\0'.

如果您可以保证满足上述所有条件,那么您可能会很好地std::string进行std::string_view迁移。


推荐阅读