String: provide operator+ for String&&, not only const String&

so that e.g. `String("foo")+"bar"` re-uses `String("foo")` instead of copying.
This commit is contained in:
Alexander A. Klimov 2025-04-01 14:49:32 +02:00
parent 061338156c
commit 80bce03565
2 changed files with 12 additions and 0 deletions

View File

@ -333,11 +333,21 @@ String icinga::operator+(const String& lhs, const char *rhs)
return lhs.GetData() + rhs;
}
String icinga::operator+(String&& lhs, const char *rhs)
{
return std::move(lhs.GetData()) + rhs;
}
String icinga::operator+(const char *lhs, const String& rhs)
{
return lhs + rhs.GetData();
}
String icinga::operator+(const char *lhs, String&& rhs)
{
return lhs + std::move(rhs.GetData());
}
bool icinga::operator==(const String& lhs, const String& rhs)
{
return lhs.GetData() == rhs.GetData();

View File

@ -144,7 +144,9 @@ std::istream& operator>>(std::istream& stream, String& str);
String operator+(const String& lhs, const String& rhs);
String operator+(const String& lhs, const char *rhs);
String operator+(String&& lhs, const char *rhs);
String operator+(const char *lhs, const String& rhs);
String operator+(const char *lhs, String&& rhs);
bool operator==(const String& lhs, const String& rhs);
bool operator==(const String& lhs, const char *rhs);