muduo库-StringPiece
muduo库-StringPiece
在 StringPiece.h 文件中,声明了两个类类型,一个是 StringArg,另一个是 StringPiece,前者用于在传递函数参数时同时兼容 C 风格的字符串(const char*)和 C++ 风格的字符串(std::string)。而后者则可用于构建同时兼任这两种风格字符串的实例对象。
如果函数参数使用 const std::string& 作为形参,尽管可以同时兼容两种风格的字符串,但是当传入一个很长的 char* 时,会生成一个很大的 string 对象,其开销较大。而且使用 std::string 时不可避免会带来很多不必要的拷贝,拷贝多了必然影响性能。因此在很多高性能 C++ 框架的实现中,都会使用 StringPiece 作为 std::string 类型的 wrapper,该类只持有目标字符串的指针,而避免额外的拷贝,同时也保证了兼容性。当仅仅读取字符串的值,可以使用该类型。
常见的实现如下:
因为 StringPiece 不控制字符串的声明周期,因此调用方要保证在 StringPiece 的生命周期内,其指向的字符串是始终有效的。
note
如果想使用 StringPiece 作为 hash 的 key,需要自定义哈希函数,可以参考 Chromium 实现。
由于 StringPiece 只持有目标指针,所以为 POD(Plain Old Data) 类型,同时拥有 trival 构造函数,因此可以定义 __type_traits 以指示 STL 采用更为高效的算法实现。
trival构造函数
muduo库-StringPiece
https://gstarmin.github.io/2023/07/17/muduo库-StringPiece/