看板 C_and_CPP 關於我們 聯絡資訊
問題(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://www.ptt.cc/bbs/C_and_CPP/M.1463976665.A.167.html
fatrabitree: 沒有member variable 而size不可為0 ->1 05/23 13:19
johnjohnlin: 1. class 內只有宣告 struct 沒有實體所以不佔空間 05/23 13:19
johnjohnlin: 2. cout member function 是什麼意思啊,有什麼用 05/23 13:22
johnjohnlin: 如果真的是第幾個的話也該是 0-index 05/23 13:22
loveflames: 因為A是empty class,大小為1 05/23 14:02
tomjpsun: johnjhonlin: https://goo.gl/jFJaUa L537,544 使用時機 05/23 16:43
tomjpsun: 感謝大大,原來 size 1 是因為這樣,問題 1. 學習了! 05/23 16:46
tomjpsun: 跪求問題2.的解釋... 05/25 17:31
LPH66: 問題2: 因為 operator << (ostream&, ???) 這系列函式裡 05/26 19:29
LPH66: 沒有吃 A::Slot::* 這種指標的東西, 所以編譯器會找一個 05/26 19:29
LPH66: 能夠 implicit 轉得過去的東西, 這裡找到的是轉成 bool 05/26 19:29
LPH66: 而一個普通指標轉成 bool 相當於檢查是否為空指標 05/26 19:30
LPH66: 這裡顯然這個指標並非空指標故轉成 true, 最後就 cout 了 05/26 19:30
LPH66: 另外兩個前者是 Slot*, 後者是 cl_program (== int*) 05/26 19:32
LPH66: 在這裡由於它們能夠 implicit 轉成 void* 所以就是用它 05/26 19:32
LPH66: 因此才會印出其位址出來 05/26 19:32
LPH66: (注意到由於成員指標和物件指標是兩個東西, 後者可以轉成 05/26 19:33
LPH66: void* 但前者不行) 05/26 19:33