c++ - 从 const std::string& 移动到 std::string_view 时的向后兼容性考虑?
问题描述
const std::string&
我维护了一个经常在其 API 中使用参数的 C++ 库。但是,我收到了一些用户请求切换到std::string_view
以帮助实现当前 API 无法实现的效率。
我正在考虑简单地将所有const std::string&
参数实例替换为std::string_view
(可能使用验证std::string_view
可用的功能检查)。这会破坏我的任何用户的向后兼容性吗?我尝试了简单的替换,它似乎没有破坏我的代码或测试中的任何内容,但这当然不是一个详尽的检查。
我确实意识到这会破坏一些取决于我的库的确切函数签名的代码。为了简单起见,假设我不允许用户依赖于我的函数的确切类型签名/参数。
解决方案
我曾尝试在自己的代码中多次替换,但以下其中一项总是让我感到困惑std::string const&
:std::string_view
std::string_view
从不拥有,因此如果您的任何std::string
基于 - 的代码出于生命周期的原因必须拥有字符缓冲区,则该部分代码无法转换为 usestd::string_view
。这些问题可能很微妙,所以应该小心。- 基于第一点,任何需要所有权/
std::string
使用的代码都意味着您在完全使用时可能获得的效率提升std::string_view
可能无法完全实现。 - 如果您依赖以空字符结尾的字符串,那么
std::string_view
这不是一个好的选择。密切注意可能需要char const*
参数的任何函数,其中隐含假设字符缓冲区以'\0'
.
如果您可以保证满足上述所有条件,那么您可能会很好地std::string
进行std::string_view
迁移。