[問題] sizeof 與 語法問題

看板C_and_CPP作者 (湯姆熊)時間9年前 (2016/05/23 12:11), 編輯推噓5(5013)
留言18則, 5人參與, 最新討論串1/1
問題(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

05/23 13:19, , 1F
沒有member variable 而size不可為0 ->1
05/23 13:19, 1F

05/23 13:19, , 2F
1. class 內只有宣告 struct 沒有實體所以不佔空間
05/23 13:19, 2F

05/23 13:22, , 3F
2. cout member function 是什麼意思啊,有什麼用
05/23 13:22, 3F

05/23 13:22, , 4F
如果真的是第幾個的話也該是 0-index
05/23 13:22, 4F

05/23 14:02, , 5F
因為A是empty class,大小為1
05/23 14:02, 5F

05/23 16:43, , 6F
johnjhonlin: https://goo.gl/jFJaUa L537,544 使用時機
05/23 16:43, 6F

05/23 16:46, , 7F
感謝大大,原來 size 1 是因為這樣,問題 1. 學習了!
05/23 16:46, 7F

05/25 17:31, , 8F
跪求問題2.的解釋...
05/25 17:31, 8F

05/26 19:29, , 9F
問題2: 因為 operator << (ostream&, ???) 這系列函式裡
05/26 19:29, 9F

05/26 19:29, , 10F
沒有吃 A::Slot::* 這種指標的東西, 所以編譯器會找一個
05/26 19:29, 10F

05/26 19:29, , 11F
能夠 implicit 轉得過去的東西, 這裡找到的是轉成 bool
05/26 19:29, 11F

05/26 19:30, , 12F
而一個普通指標轉成 bool 相當於檢查是否為空指標
05/26 19:30, 12F

05/26 19:30, , 13F
這裡顯然這個指標並非空指標故轉成 true, 最後就 cout 了
05/26 19:30, 13F

05/26 19:32, , 14F
另外兩個前者是 Slot*, 後者是 cl_program (== int*)
05/26 19:32, 14F

05/26 19:32, , 15F
在這裡由於它們能夠 implicit 轉成 void* 所以就是用它
05/26 19:32, 15F

05/26 19:32, , 16F
因此才會印出其位址出來
05/26 19:32, 16F

05/26 19:33, , 17F
(注意到由於成員指標和物件指標是兩個東西, 後者可以轉成
05/26 19:33, 17F

05/26 19:33, , 18F
void* 但前者不行)
05/26 19:33, 18F
文章代碼(AID): #1NGeBP5d (C_and_CPP)