2013-04-26 6 views
1

Я пытаюсь понять, все ли эти типы. У меня есть эта функция от windows.h: GetCommandLine(), в режиме UNICODE, и он возвращает LPWSTR. Теперь, если я копаю глубже, я вижу, как LPWSTRwchar_t*, и если я пойду еще дальше, я узнаю, что wchar_t - unsigned short (16 байт) или unsigned long (32 байта). Тем не менее, если я это сделать:LPWSTR, wchar_t * и неподписанный короткий указатель в C++

unsigned short* SysComm = GetCommandLine(); 

Я получаю эту ошибку:

cannot convert from 'LPWSTR {aka wchar_t*} to 'short unsigned int*' in initialization

Таким образом, делает компилятор следовать той же логике, чтобы узнать, что LPWSTR является unsigned short* в конце концов, или я ошибаюсь?

ответ

3

wchar_t - это отдельный тип, который имеет те же свойства, что и один из других целочисленных типов.

Type wchar_t is a distinct type [...]. Type wchar_t shall have the same size, signedness, and alignment requirements (3.11) as one of the other integral types, called its underlying type.

Таким образом, вы не можете неявно преобразовать из wchar_t* в short* точно так же, как от int* к short*.

+0

Но могу ли я перевести из int * в короткий *, например? – ali

+0

@ali Неявно. Вы можете сделать это с помощью 'reinterpret_cast', но это будет плохая идея. Вы можете использовать от 'int' до' short', но не между указателями для каждого из них. –

+0

Спасибо. Итак, если я скажу 'typedef int myint', то' myint' и 'int' не совпадают для компилятора, даже если они имеют одинаковый размер, правильно? – ali