作者tomjpsun (湯姆熊)
看板C_and_CPP
標題[問題] sizeof 與 語法問題
時間Mon May 23 12:11:03 2016
問題(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
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.226.107.60
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1463976665.A.167.html
1F:推 fatrabitree: 沒有member variable 而size不可為0 ->1 05/23 13:19
2F:推 johnjohnlin: 1. class 內只有宣告 struct 沒有實體所以不佔空間 05/23 13:19
3F:推 johnjohnlin: 2. cout member function 是什麼意思啊,有什麼用 05/23 13:22
4F:→ johnjohnlin: 如果真的是第幾個的話也該是 0-index 05/23 13:22
5F:推 loveflames: 因為A是empty class,大小為1 05/23 14:02
7F:→ tomjpsun: 感謝大大,原來 size 1 是因為這樣,問題 1. 學習了! 05/23 16:46
8F:→ tomjpsun: 跪求問題2.的解釋... 05/25 17:31
9F:推 LPH66: 問題2: 因為 operator << (ostream&, ???) 這系列函式裡 05/26 19:29
10F:→ LPH66: 沒有吃 A::Slot::* 這種指標的東西, 所以編譯器會找一個 05/26 19:29
11F:→ LPH66: 能夠 implicit 轉得過去的東西, 這裡找到的是轉成 bool 05/26 19:29
12F:→ LPH66: 而一個普通指標轉成 bool 相當於檢查是否為空指標 05/26 19:30
13F:→ LPH66: 這裡顯然這個指標並非空指標故轉成 true, 最後就 cout 了 05/26 19:30
14F:→ LPH66: 另外兩個前者是 Slot*, 後者是 cl_program (== int*) 05/26 19:32
15F:→ LPH66: 在這裡由於它們能夠 implicit 轉成 void* 所以就是用它 05/26 19:32
16F:→ LPH66: 因此才會印出其位址出來 05/26 19:32
17F:→ LPH66: (注意到由於成員指標和物件指標是兩個東西, 後者可以轉成 05/26 19:33
18F:→ LPH66: void* 但前者不行) 05/26 19:33