※ 引述《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>