2013-04-26 73 views
1

我想了解這些類型是否都一樣。我有這個功能windows.hGetCommandLine(),在UNICODE模式下,它返回一個LPWSTR。現在,如果我深入瞭解,我可以看到LPWSTR是如何wchar_t*,如果我走得更遠,我發現wchar_tunsigned 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 *轉換成short *嗎? – ali 2013-04-26 09:44:24

+0

@ali不含蓄。你可以用'reinterpret_cast'來完成,但這不是個好主意。你可以從'int'投射到'short',但不能在指向每個人的指針之間。 – 2013-04-26 09:49:39

+0

謝謝。所以,如果我說'typedef int myint',那麼編譯器的myint和int就不一樣了,即使它們有相同的大小,對吧? – ali 2013-04-26 10:16:21