關於this關於某個Winsock結構的頁面,這個例子看起來像是取了一個結構體的地址,並將結果指針轉換爲指向完全不同結構的指針。C++嚴格別名:不是這個MSFT示例UB嗎?
SOCKET ListenSocket;
struct sockaddr_in saServer;
// Bind the listening socket using the information in the sockaddr structure
bind(ListenSocket,(SOCKADDR*) &saServer, sizeof(saServer));
下面是這兩個結構的聲明。這在技術上是未定義的行爲,對嗎?
struct sockaddr {
ushort sa_family;
char sa_data[14];
};
struct sockaddr_in {
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
指針轉換從不違反嚴格的別名規則(看起來這是一個常見的誤解) –
@HarryJohnston庫實現不受ISO C++規則的約束,甚至可能不會用C++ –