Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
UTF-16 что-то промежуточное и непонятно зачем нужноеНу как сказать, для Windows sizeof( wchar_t ) == 2, и в ней нативно используется UCS-2 (ранний вариант стандарта UTF-16, не допускающий последовательностей если правильно помню), в Linux sizeof( wchar_t ) == 4 и применяется UTF-32.
А с решением Björn Höhrmann не сравнивали? Его код выглядит гениально коротким и быстрым.
Никаких тяжёлых операций, только проверка условий, ...
Сброс конвейера, все дела, не? Всё-таки интересно было бы увидеть сравнение с решением Björn Höhrmann (ссылка выше). Не берусь сказать, что будет быстрее.
Ещё можно "поиграться" со std::string::reserve(). В вашем коде оно будет вызываться явно больше одного раза (на больших строках), при желании можно сократить до одного вызова вначале.
Это следует учитывать и при сравнительных тестах.
Unicode — это очень увлекательно