practices guidelines best c++ c unsigned short wchar-t

guidelines - c++ best practices



¿Es wchar_t solo un typedef de unsigned short? (6)

por ejemplo, hace:

wchar_t x;

traducir a:

unsigned short x;


El estándar no requiere que wchar_t esté sin firmar. También puede ser firmado. Y debe haber otro tipo del mismo tamaño; pero el estándar no dice explícitamente que ese otro tipo debe ser corto.

"el mismo tamaño, firmeza y requisitos de alineación que uno de los otros tipos integrales, llamado su tipo subyacente" (C ++ 98 §3.9.1).

En los compiladores de C, esto es un typedef, generalmente definido en stddef.h


En resumen: en C puede estar en C ++ no.

Extensamente. C define wchar_t como typedef pero en Unix generalmente es de 4 bytes (por lo general no es corto) y en Windows 2, por lo que puede ser corto.

Bajo C ++, es un tipo incorporado único como char o int , por lo que puede sobrecargar legalmente void foo(short x) y void foo(wchar_t x)


No necesariamente; podría ser una cantidad de 4 bytes, o incluso cualquier otro tamaño elegido por la implementación.

Depende del compilador.


No, no lo hace. Se traduce en ''un personaje ancho''. Hacer cualquier suposición sobre lo que sucede en una plataforma en particular es incorrecto y anula todo el propósito de tener un wchar_t en primer lugar.

El punto de usar una abstracción es separar el significado semántico del tipo de su representación subyacente.


Para C, wchar_t es un typedef . Si es un sinónimo de unsigned int , si es un tipo sin signo o si es de 4 bytes, está definido por la implementación.

En C ++, wchar_t es un tipo incorporado distinto. Aquí, también, su tamaño y firmeza están definidos por la implementación.


Para cualquier otra persona que pueda encontrar esta respuesta porque las llamadas de función en su proyecto de Visual Studio no se vincularán, a pesar de que ambas partes tomen wchar_t (o un tipo similar, como LPCTSTR con UNICODE #defined), y cuando DUMPBIN la biblioteca exporta La función se const unsigned short * , tenga en cuenta que VS le permite desactivar wchar_t como un tipo incorporado. Si alguien cambia esto en una biblioteca y no presiona el mismo interruptor de compilación en su proyecto, no se vinculará.

Esta opción se puede cambiar en "Propiedades del proyecto> C / C ++ / Language / Treat WChar_t como tipo Builtin", también se puede cambiar a través de la opción "/ Zc".