亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么C ++中空類的大小不為零?

為什么C ++中空類的大小不為零?

C++
慕哥9229398 2019-11-27 10:33:27
為什么會輸出以下內容1?#include <iostream>class Test{};int main(){    std::cout << sizeof(Test);    return 0;}
查看完整描述

3 回答

?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

該標準不允許大小為0的對象(及其類),因為這將使兩個不同的對象具有相同的內存地址成為可能。這就是為什么即使空類的大小也必須至少為1的原因。


查看完整回答
反對 回復 2019-11-27
?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

C ++標準保證任何類的大小至少為一個。C ++標準規定,任何對象都不應與另一個對象具有相同的內存地址。這樣做有幾個很好的理由。


為了保證new始終會返回指向不同內存地址的指針。


避免被零除。例如,指針算術(其中許多由編譯器自動完成)涉及除以sizeof(T)。


但是請注意,這并不意味著一個空的基類將為派生類的大小加1:


struct Empty { };


struct Optimized : public Empty {

    char c;

};


// sizeof(Optimized) == 1 with g++ 4.0.1

Bjarne Stroustrup也談到了這一點。


查看完整回答
反對 回復 2019-11-27
?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

沒有任何數據成員和成員函數的類,此類類型的類稱為空類??疹惖膶ο蟮拇笮∈冀K為1個字節。

當我們那時創建任何類的對象時,對象總是具有3個特征,即

  1. 行為

  2. 身分識別

那時我們創建空類的對象時,該對象的狀態為空。該對象的行為也不是什么,但是編譯器會為該對象分配一個唯一的地址。計算機中的內存始終以字節的形式組織,在對象地址位置可用的最小內存為1字節。這就是為什么空類的對象的大小為1個字節的原因。


查看完整回答
反對 回復 2019-11-27
  • 3 回答
  • 0 關注
  • 565 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號