Aus der Dokumentation der StringPiece class in Chromium's source code:Gibt es Gründe, warum das StringPiece/StringRef-Idiom nicht beliebter ist?
// 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.
Beispiel:
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");
}
dies eine wichtige und offensichtliche Optimierung wie so scheint, dass ich kann nicht verstehen, warum es nicht mehr weit verbreitet ist, und warum Eine Klasse, die StringPiece ähnlich ist, ist nicht bereits im Standard enthalten.
Gibt es irgendwelche Gründe, warum ich die Verwendung von string
und char*
Parameter in meinem eigenen Code mit dieser Klasse nicht ersetzen sollte? Gibt es so etwas schon in den C++ - Standardbibliotheken?
UPDATE. Ich habe gelernt, dass die Quelle von LLVM ein ähnliches Konzept verwendet: die StringRef Klasse.
Ich mag dies als eine theoretische Idee. Ich frage mich, wie verwirrend es in der Praxis ohne "Training" wäre. – jmucchiello
Alte Post, aber für zukünftige Leser sollte es beachten, wurde vorgeschlagen: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3442.html –