Является ли wchar_t просто typedef из unsigned short?
например:
wchar_t x;
перевести на:
unsigned short x;
Ответы
Ответ 1
Вкратце: в C может быть С++ no.
Широко. C определяет wchar_t как typedef, но в Unix он обычно имеет 4 байта (как правило, не короткий), а в Windows 2, поэтому он может быть коротким.
В С++ это уникальный встроенный тип типа char
или int
, поэтому вы можете законно перегружать void foo(short x)
и void foo(wchar_t x)
Ответ 2
Для всех, кто может столкнуться с этим ответом, потому что вызовы функций в проекте Visual Studio не будут связаны, несмотря на то, что обе стороны принимают wchar_t
(или сопоставимый тип, например LPCTSTR
с UNICODE #defined), и когда вы DUMPBIN экспортируете библиотеку, функция принимает const unsigned short *
, имейте в виду, что VS позволяет отключить wchar_t
как встроенный тип. Если кто-то изменит это в библиотеке, и вы не попадете в один и тот же компилятор в своем проекте, он не будет ссылаться.
Этот параметр можно изменить в разделе "Свойства проектa > C/С++/Язык/Обработка WChar_t как Тип встроенного", его также можно изменить с помощью опции "/Zc".
Ответ 3
Для C, wchar_t
есть typedef
. Является ли это синонимом unsigned int
, независимо от того, является ли он беззнаковым типом вообще или является ли он 4 байтами, определяется реализацией.
В С++ wchar_t
- это отдельный встроенный тип. Здесь также определяется размер и подпись.
Ответ 4
wchar_t не требуется, чтобы стандарт был беззнаковым. Он также может быть подписан. И должен быть другой тип того же размера; но в стандарте явно не сказано, что другой тип должен быть коротким.
"те же требования к размеру, подписи и выравниванию как один из других интегральных типов, называемый его базовым типом" (С++ 98 §3.9.1).
В компиляторах C это typedef, обычно определяемый в stddef.h
Ответ 5
Нет, это не так. Это означает "широкий характер". Выполнение каких-либо предположений о том, что происходит на конкретной платформе, неверно, и в первую очередь поражает всю цель иметь wchar_t.
Пункт использования абстракции состоит в том, чтобы отделить семантическое значение этого типа от его основного представления.
Ответ 6
Не обязательно; это может быть 4-байтовое количество или даже любой другой размер, выбранный реализацией.
Это зависит от компилятора.