diff options
author | ignatloskutov <ignatloskutov@yandex-team.com> | 2023-08-10 19:38:26 +0300 |
---|---|---|
committer | ignatloskutov <ignatloskutov@yandex-team.com> | 2023-08-10 21:04:00 +0300 |
commit | ea943290d0e41b41d577fc00e8953dbb963a8cc4 (patch) | |
tree | ca81e8aaf3e622ef95eeb6fa50ebca41361dd528 /util/generic/string.h | |
parent | 94c58b86cb9d905597638de1ea0932c364d1819d (diff) | |
download | ydb-ea943290d0e41b41d577fc00e8953dbb963a8cc4.tar.gz |
TString: improve `operator+` rvalue overloads
The missing `(TCharType, TBasicString&&)` overload added, so no allocation is performed if the string has spare capacity.
Diffstat (limited to 'util/generic/string.h')
-rw-r--r-- | util/generic/string.h | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/util/generic/string.h b/util/generic/string.h index fd3c771749..4184ea3761 100644 --- a/util/generic/string.h +++ b/util/generic/string.h @@ -904,6 +904,11 @@ public: return Join(TCharType(ch), s); } + friend TBasicString operator+(TExplicitType<TCharType> ch, TBasicString&& s) Y_WARN_UNUSED_RESULT { + s.prepend(ch); + return std::move(s); + } + friend TBasicString operator+(const TBasicString& s1, const TBasicString& s2) Y_WARN_UNUSED_RESULT { return Join(s1, s2); } @@ -939,11 +944,11 @@ public: } friend TBasicString operator+(std::basic_string<TCharType, TTraits> l, TBasicString r) { - return l + r.ConstRef(); + return std::move(l) + r.ConstRef(); } friend TBasicString operator+(TBasicString l, std::basic_string<TCharType, TTraits> r) { - return l.ConstRef() + r; + return l.ConstRef() + std::move(r); } // ~~~ Prepending ~~~ : FAMILY0(TBasicString&, prepend); |