[問題] sizeof 與 語法問題

作者: tomjpsun (湯姆熊)   2016-05-23 12:11:03
問題(Question):
各位板上大大請問一下:
1. 程式輸出得到 sizeof 為 1, 怎麼解釋?(Class 連同 align space 共計 1 byte?)
2. &Slot::inner_var 明明在第二位置,為何輸出為 member = 1 ?
謝謝各位!
下列程式執行得到:
size of A = 1
&slot = 0x7fff5140c9f8
member = 1
slot.*member = 0x10e7f50bc
a.get_program() = 0x10e7f50bc
程式碼(Code):(請善用置底文網頁, 記得排版)
https://goo.gl/gezaKC
作者: fatrabitree (胖兔子)   2016-05-23 13:19:00
沒有member variable 而size不可為0 ->1
作者: johnjohnlin (嗯?)   2016-05-23 13:19:00
1. class 內只有宣告 struct 沒有實體所以不佔空間2. cout member function 是什麼意思啊,有什麼用如果真的是第幾個的話也該是 0-index
作者: loveflames (咕啾咕啾魔法陣)   2016-05-23 14:02:00
因為A是empty class,大小為1
作者: tomjpsun (湯姆熊)   2016-05-23 16:43:00
johnjhonlin: https://goo.gl/jFJaUa L537,544 使用時機感謝大大,原來 size 1 是因為這樣,問題 1. 學習了!
作者: LPH66 (-6.2598534e+18f)   2016-05-26 19:29:00
問題2: 因為 operator << (ostream&, ???) 這系列函式裡沒有吃 A::Slot::* 這種指標的東西, 所以編譯器會找一個能夠 implicit 轉得過去的東西, 這裡找到的是轉成 bool而一個普通指標轉成 bool 相當於檢查是否為空指標這裡顯然這個指標並非空指標故轉成 true, 最後就 cout 了另外兩個前者是 Slot*, 後者是 cl_program (== int*)在這裡由於它們能夠 implicit 轉成 void* 所以就是用它因此才會印出其位址出來(注意到由於成員指標和物件指標是兩個東西, 後者可以轉成void* 但前者不行)

Links booklink

Contact Us: admin [ a t ] ucptt.com