某日小二參加XXX科技公司的C++工程師開發崗位5面:
面試官:struct和class有什么區別?
小二:在C++中,struct和class的唯一區別是默認的訪問控制,struct默認的成員是public的,而class的默認成員是private的,
面試官:struct、class和union有哪些區別?
小二:union和struct、class在記憶體布局上不同,union實體的所有成員共享一塊記憶體,這塊記憶體的大小等同于union中成員尺寸最大的一個,
面試官:你能列舉一下union適合使用的場合嗎?
小二:額,,(我哪知道啊,從來沒用過,,)
面試官:好的,回去等通知吧,
對于這三個關鍵字,相信小伙伴們對前兩個關鍵字并不陌生,但是對于union可能用的會少一些,
union最開始的出現是為了解決記憶體占用的問題,例如你需要存盤一個IP地址,但是你并不知道IP的型別,你需要:
struct IP
{
char ipv4[4];
char ipv6[16];
}; //sizeof(IP) = 20
對于一個IP地址,要么是IPV4要么是IPV6,IPV4和IPV6是互斥的,那么肯定有一塊空間是被浪費了,此時我們的union就派上用場了:
union IP
{
char ipv4[4];
char ipv6[16];
}; //sizeof(IP) = 16
第二種用法是可以通過union判斷大小端,(當然也可以通過其他方法)
union End
{
unsigned char uc;
unsigned short us;
};
bool is_little_end()
{
End end{0};
end.us = 1;
return end.uc;
}
小端模式的意思是,低位放在低記憶體,高位放在高記憶體,而大端正好相反,當我們給us賦值1時,如果是大端,記憶體中的資料應該是這樣的:0x00,0x01,這時候如果取uc的值,只能取到0x00,如果是小端,記憶體中的資料應該是0x01,0x00,此時取到的uc的值是0x01,回傳1(true),
小伙伴們,你還知道union的其他用法嗎?
關注我,帶你21天“精通”C++!(狗頭)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/554261.html
標籤:其他
上一篇:Java實作AWS S3 V4 Authorization自定義驗證
下一篇:返回列表