#if BUILDFLAG(IS_WIN) // Guard against conflict with Win32 API StrCat macro: // check StrCat wasn't and will not be redefined. #define StrCat StrCat #endif
namespace base {
// StrCat ---------------------------------------------------------------------- // // StrCat is a function to perform concatenation on a sequence of strings. // It is preferrable to a sequence of "a + b + c" because it is both faster and // generates less code. // // std::string result = base::StrCat({"foo ", result, "\nfoo ", bar}); // // To join an array of strings with a separator, see base::JoinString in // base/strings/string_util.h. // // MORE INFO // // StrCat can see all arguments at once, so it can allocate one return buffer // of exactly the right size and copy once, as opposed to a sequence of // operator+ which generates a series of temporary strings, copying as it goes. // And by using StringPiece arguments, StrCat can avoid creating temporary // string objects for char* constants. // // ALTERNATIVES // // Internal Google / Abseil has a similar StrCat function. That version takes // an overloaded number of arguments instead of initializer list (overflowing // to initializer list for many arguments). We don't have any legacy // requirements and using only initializer_list is simpler and generates // roughly the same amount of code at the call sites. // // Abseil's StrCat also allows numbers by using an intermediate class that can // be implicitly constructed from either a string or various number types. This // class formats the numbers into a static buffer for increased performance, // and the call sites look nice. // // As-written Abseil's helper class for numbers generates slightly more code // than the raw StringPiece version. We can de-inline the helper class' // constructors which will cause the StringPiece constructors to be de-inlined // for this call and generate slightly less code. This is something we can // explore more in the future.
// StrAppend ------------------------------------------------------------------- // // Appends a sequence of strings to a destination. Prefer: // StrAppend(&foo, ...); // over: // foo += StrCat(...); // because it avoids a temporary string allocation and copy.
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.