Из документации StringPiece класса в исходном коде Chromium :
// A string-like object that points to a sized piece of memory.
//
// Functions or methods may use const StringPiece& parameters to accept either
// a "const char*" or a "string" value that will be implicitly converted to
// a StringPiece.
//
// Systematic usage of StringPiece is encouraged as it will reduce unnecessary
// conversions from "const char*" to "string" and back again.
Пример использования:
void foo(StringPiece const & str) // Pass by ref. is probably not needed
{
// str has same interface of const std::string
}
int main()
{
string bar("bar");
foo(bar); // OK, no mem. alloc.
// No mem. alloc. either, would be if arg. of "foo" was std::string
foo("baz");
}
Это кажется такой важной и очевидной оптимизацией, что я не могу понять, почему она не получила более широкого распространения и почему класс, подобный StringPiece, еще не входит в стандарт.
Есть ли причины, по которым я не должен заменять использование параметров string
и char*
в моем собственном коде этим классом? Есть ли что-нибудь подобное в стандартных библиотеках C ++?
UPDATE . Я узнал, что источник LLVM использует похожую концепцию: класс StringRef .