Из документации класса 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*
в моем собственном коде этим классом? Есть ли что-нибудь подобное в стандартных библиотеках С++?
UPDATE. Я узнал, что источник LLVM использует аналогичную концепцию: класс StringRef.