wchar_t является просто определением типа короткого целого без знака?

например, делает:

wchar_t x;

переведите в:

unsigned short x;
17
задан sbi 3 August 2012 в 20:14
поделиться

5 ответов

Короче: в C может быть, в C ++ нет.

Широко. C определяет wchar_t как typedef, но в Unix он обычно составляет 4 байта (поэтому обычно не короткий), а в Windows 2 он может быть коротким.

В C ++ это уникальный встроенный тип, например char или int , поэтому вы можете законно перегрузить void foo (short x) и void foo (wchar_t x)

21
ответ дан 30 November 2019 в 10:46
поделиться

Для C wchar_t является typedef . Является ли это синонимом для unsigned int , является ли это вообще беззнаковым типом или имеет ли он 4 байта, определяется реализацией.

В C ++ wchar_t является отдельным встроенным типом. Здесь также его размер и подпись определяются реализацией.

11
ответ дан 30 November 2019 в 10:46
поделиться

Не обязательно; это может быть 4-байтовый размер или любой другой размер, выбранный реализацией.

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

0
ответ дан 30 November 2019 в 10:46
поделиться

Стандарт не требует, чтобы wchar_t был беззнаковым. Он может быть и знаковым. И должен существовать другой тип того же размера; но стандарт не говорит прямо, что этот другой тип должен быть коротким.

"те же требования к размеру, знаковости и выравниванию, что и у одного из других интегральных типов, называемого его базовым типом" (C++98 §3.9.1).

В компиляторах языка Си это типизация, обычно определяемая в stddef.h

1
ответ дан 30 November 2019 в 10:46
поделиться

Нет, это не так. Это переводится как 'широкий персонаж'. Делать какие-либо предположения о том, каким он окажется на конкретной платформе, неверно и противоречит всей цели наличия wchar_t в первую очередь.

Смысл использования абстракции в том, чтобы отделить семантическое значение типа от его базового представления.

1
ответ дан 30 November 2019 в 10:46
поделиться