看板 Programming 關於我們 聯絡資訊
※ 引述《ya790206 (殘雲奪月)》之銘言: 恕刪 : 結果是4 8 : 為何是八之前有人問過,不過我不懂 : DevC++的結果 我認為它的sizeof的計算方式很有趣 我把B改成虛擬繼承A,印出來就變成4 12 然後如果A的x是static int 印出來會變成1 1 不知道是怎麼算的 -- 自High筆記(半荒廢) http://legnaleurc.blogspot.com/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.74.131.219
adrianshum:virtual inheritence 反而變大? 202.155.236.82 02/13 16:54
adrianshum:還是你指的是有 method 是 virtual? 202.155.236.82 02/13 16:56
adrianshum:static 是 1 很正常因為 int 不是 202.155.236.82 02/13 16:56
adrianshum:instance var 而是 class var 202.155.236.82 02/13 16:57
legnaleurc:對,就是virtual inheritence 211.74.131.219 02/13 16:56
ya790206:虛擬計程真的變大,DevC++跟VC++2005 59.116.135.217 02/13 16:56
legnaleurc:use gcc 4.1.2 211.74.131.219 02/13 16:57
legnaleurc:但是class B也變成1就說不過去了 211.74.131.219 02/13 16:58
adrianshum:virtual繼承和一般主要分別不是指多個 202.155.236.82 02/13 17:00
legnaleurc:畢竟B還是有一般成員變數啊 211.74.131.219 02/13 17:00
adrianshum:同樣的 base class instance 只會出現 202.155.236.82 02/13 17:00
adrianshum:在本身一次嘛? 理應只會小不會大哩, 還 202.155.236.82 02/13 17:01
adrianshum:是要逹到這個有特別的 overhead? 202.155.236.82 02/13 17:01
adrianshum:legnaleurc: 1 沒有問題吧? 裡面沒東西 202.155.236.82 02/13 17:01
adrianshum:不是 1 該是什麼 ? o_oa 202.155.236.82 02/13 17:02
legnaleurc:不會連vt也算在sizeof裡吧? 211.74.131.219 02/13 17:02
legnaleurc:A有一個static int x 211.74.131.219 02/13 17:02
legnaleurc:啊啊,我好像了解了....所以static不會 211.74.131.219 02/13 17:03
legnaleurc:使用多餘的空間 211.74.131.219 02/13 17:04
legnaleurc:我原本認為是1 2,就是會再加上B 211.74.131.219 02/13 17:04
adrianshum:vt 當然有算在 sizeof 的 202.155.236.82 02/13 17:06
saladim:虛擬繼承會多出一個指標122.116.230.132 02/15 20:39
saladim:指向virtual table, 請參閱C++的書籍122.116.230.132 02/15 20:39
saladim:static的member不算入class大小122.116.230.132 02/15 20:41