Является ли 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-байтовое количество или даже любой другой размер, выбранный реализацией.

Это зависит от компилятора.