Я предположил, что std :: wstring и std :: string оба предоставляют более или менее одинаковый интерфейс.
Поэтому я попытался включить возможности Unicode для нашего приложения
# ifdef APP_USE_UNICODE
typedef std::wstring AppStringType;
# else
typedef std::string AppStringType;
# endif
Однако, это дает мне много ошибок компиляции, когда используется -DAPP_USE_UNICODE.
Оказалось, что компилятор задыхается, когда const char[]
назначено std::wstring
.
РЕДАКТИРОВАТЬ : улучшен пример, исключив использование литерала "привет".
#include <string>
void myfunc(const char h[]) {
string s = h; // compiles OK
wstring w = h; // compile Error
}
Почему это так важно?
Назначение const char*
для std::string
разрешено, но присвоение std::wstring
дает ошибки компиляции.
Разве std::wstring
не должен обеспечивать тот же интерфейс, что и std::string
? Хотя бы для такой базовой операции, как присваивание?
(среда: gcc-4.4.1 в Ubuntu Karmic 32bit)