Есть ли способ сделать все последовательности символов UNICODE по умолчанию? Например, теперь я должен сказать:
std::wstring wstr(L"rofl");
вместо этого я хотел бы сказать
std::wstring wstr("rofl");
Спасибо!
Visual C++ 8.0





Нет, вы должны использовать L"", чтобы указать литерал с широкой строкой.
Нет, такого нет. Многие платформы, предназначенные для компиляции либо с Unicode, либо с ASCII (но не с обоими), предоставляют макросы, позволяющие легко выбрать желаемый тип символа (часто используется _, например _("text")). Вы можете использовать это, если ваша проблема компилируется для обоих вариантов. В противном случае это всего лишь дополнительный символ.
Также имейте в виду, что точное кодирование wchar_t может варьироваться от платформы к платформе. Иногда это UTF-16, иногда UTF-32. C++ 1x добавит строки с явной кодировкой u8"string"u"string" и U"string". (Могу ошибаться насчет префиксов, но такие строки будут).
Меня это удивило: у wstring нет конструктора wstring (const char *) ??
Неа. Он имеет basic_string <T> (const T *), где T = wchar_t.
Возможно; стандарт этого не требует, но и не запрещает.
Кроме того, CString поддерживает конструкцию поперечной ширины (например: CString («текст») будет работать для сборок Unicode, а CString (L «текст») для сборок MBCS), но все же выполняет преобразование в обоих случаях. Это может сделать то, что вы хотите, за счет производительности.
Я бы посоветовал привыкнуть к использованию _T ("текст"), так как это вообще то, что вам нужно.
Нет, у него есть конструктор wstring (const wchar_t *). Он также имеет конструктор из пары итераторов, но это неуместно в случае строкового литерала.