精華區beta Programming 關於我們 聯絡資訊
※ 引述《Oscar0121.bbs@ptt.cc (java新手)》之銘言: > tinlan大大您好 感謝您為我們解惑 > 版上也常拜讀您的文章 受益不少^^ > 但是此例小弟實驗結果 怎麼都還是4 byte呢 > 編譯環境 VC6 console mode > 哪裡有問題呢?編譯環境沒設定好嗎 > #include <iostream> > using namespace std; > class X{ > void foo(void){} > }; > int main() > { > void (X::*ptr)(void); > cout<<sizeof(ptr)<<endl; > int* pt=new int(6); //一般pointer > cout<<sizeof(pt)<<endl; > return 0; > } > 兩者皆輸出 4 事實上標準並沒有規定 member function pointer 的 size, 各家編譯器有自己的實作方式, MSVC 在如此簡單的 class 來說的確是 4 bytes, 這個現象與 class 的繼承關係複雜度有關, 您可以嘗試製造複雜一點的 class 繼承關係, 再觀察它的 member function pointer size, 應該會發現多重繼承和虛擬繼承等狀況下可能又會出現不同的 size。 -- Name: Tseng, Ling-hua E-mail Address: uranus@it.muds.net School: National Chung Cheng University Department: Computer Science and Information Engineering Researching: Porting GCC and Implementing VLIW instruction scheduler in GCC Homepage: https://it.muds.net/~uranus -- ╔═══╗ ┼────────────────────────╮ 狂狷 Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮ 年少 ┼╮ < IP:140.119.164.16 > ╰─╮ ╚╦═╦╝ From:218-171-156-105.dynamic.hinet.net ─╨─╨─ KGBBS 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩 -- * Modify: tinlans 05/06/02 19:14:28 <218-171-156-105.dynamic.hinet.net>