C++-StringPiece
背景
很多时候,当传入一个字符串到函数时,往往只是读取字符串时
若使用
std::string
,当实参为const char *
时,会分配内存并拷贝该字符串以生成一个std::string
当一个函数接受一个
const std::string
,而在该函数内部,又需要传递该值到另一个函数,则又需要重新生成一个std::string
目的
当某个接口参数是接受字符串类型时,为了减少不必要的开销
该类型可以接受
const char *
,std::string
,减少冗余代码编写
要点
StringPiece(google), StringRef(llvm), string_ref(boost)
,本质名,non-owning reference to a string
通过隐式转换,方便地从
const char*, std::string
转换到此类型该类通过保存字符串指针和长度,来避免不必要的复制
只支持非修改操作
开销很低,只需要
sizeof(const char*) + sizeof(size_t)
字节支持所有的类容器操作
因为
StringPiece
不拥有数据,所以确保在StringPiece
生命期内,该数据可用