ideas icon indicating copy to clipboard operation
ideas copied to clipboard

Добавить операция конкатенация std::string и std::string_view (operator +)

Open Neargye opened this issue 4 years ago • 3 comments

Перенос предложения: голоса +18, -3 Автор идеи: khnormuradov

Не комплируется конкатенация string_view и std::string: string_view{} + string{} --> ERROR

#include <string>
#include <cstdio>
 

int main()
{
   std::string s = "hello ";
   std::string_view v = "world";
   std::string result = v+s; // ERROR: not found operator + overload
}

Поэтому предлагаю добавить два оверлоад

string operator + (const string_view sv, const string& s)
{
   string result;
   result.reserve(sv.size() + s.size());
   result.append(sv);
   result.append(s);
   return result;
}

string operator + (const string& s, const string_view sv )
{
    string result;
    result.reserve(s.size() + sv.size());
    result.append(s);
    result.append(sv);
    return result;
}

// и для  string && s    случай ещё две оверлоады.   
// Это только схема, в самом деле надо делать через шаблон  
// template <typaname CharT, typename Traits, typename Allocator> basic_string,
// Но без них код выглядить более читабельно.

Neargye avatar Mar 14 '21 11:03 Neargye

Magomed Kostoev 19 июля 2020, 17:05 Прям мысли прочли, как раз хотел прийти сюда с таким же предложением.

Neargye avatar Mar 14 '21 11:03 Neargye

я ~~джва года~~ устал ждать эту несчастную перегрузку, блджад!

ещё есть вот такое:
http://wg21.link/p1228
но оно, видимо, протухло. хотя можно было бы и оживить.

toughengineer avatar Jun 11 '21 12:06 toughengineer

я ~джва года~ устал ждать эту несчастную перегрузку, блджад!

Не ждите, напишите proposal, убедитесь что перегрузки не ломают старый код, где строка складывается с const char* или с типом с operator string()

apolukhin avatar Jun 12 '21 14:06 apolukhin