Здравствуйте, Eugeny__, Вы писали:
G>>std::string ::ToLower() это еще одно выделение памяти и копирование или move (который появился относительно недавно).
E__>Хотел бы я знать, как ты собираешься делать ToLower или ToUpper без перевыделения памяти. Учитывая, что ascii давно на помоечке, а в юникоде эта операция запросто может привести к увеличению фактической длины строки в байтах — и как ее затокать назад в исходный буфер?
Во первых, я сказал "еще одно".
std::string ::ToLower()
{
...
return buffer; // вот оно то, которое можно избежать
}
Во вторых, смотри char16_t и char32_t, которые были добавлены в С++11 с целью обеспечить фиксированную длину символа.