C++:string_view 与 C API 的互操作性

发布时间:2019-06-17 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了C++:string_view 与 C API 的互操作性脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

std::string_view 是 C++17 新加的一个类,是字符串的无所有权引用。对 std::string_view 的操作都不会生成新字符串(比如 substr),而是返回一个新的 string_view 但是引用原字符串。

这样效率是有提升,但是带来一个问题就是:std::string_view 没有 c_str 方法。

string_view 所引用的字符串很有可能不是 结尾的(Null-terminated byte strings),大多数 C API 都要求零结尾字符串,导致 string_view 和 C 函数互操作性很差(请不要不加考虑直接把 string_view#data() 传给 C 函数)。

某些 C 函数接受长度参数,比如 fwrite,还有某些函数虽然没有显式的要求你传字符串长度,但是也可以指定,比如 PRintf。

大家都知道 printf 输出字符串的方式是 %s(请不要把字符串当格式化自字符串直接输出),其实 %s 还能接受一些参数,完整形式是:%.Ns。其中 N 代表字符串中输出字符的个数,截取前三个字符输出就是 %.3s。更强大的是 N 可以是字符 *,代表输出的字符通过参数传入,所以通过 printf 家族输出 string_view 的方式就是

printf("%.*s", int(sv.length()), sv.data());

脚本宝典总结

以上是脚本宝典为你收集整理的C++:string_view 与 C API 的互操作性全部内容,希望文章能够帮你解决C++:string_view 与 C API 的互操作性所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。