看板 C_and_CPP 關於我們 聯絡資訊
https://ideone.com/9ufeMX 請問上述的程式碼 我不確定1和2 真正被push到stack上 bar和foo誰先被push(我觀念上1和2都是 foo先 再來是bar) 而我從印出this似乎1,2兩個push到stack的順序也是一樣(但不知道為啥最佳化後 stack address是小到大) =============以上 不知道結論有沒有錯============ 但以我的觀念, 我是覺得先被push就是最後被解構 但用stack的觀念上我無法解釋 為什麼解構順序會有差別? 如果從code來看, 確實是很合理 但不知道為什麼stack就說不通? 中間有什麼盲點我搞錯了? 或是因為一些手段 導致我光看this的位址是不準確的? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.10.190 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1461825790.A.6BB.html
CaptainH: 從來就沒這回事吧 04/28 18:02
CoNsTaR: auto 變數的解構順序和建構順序相反 04/29 09:51
CoNsTaR: 內建型別static變數建構/解構時間就是程式開始/結束的時 04/29 09:52
CoNsTaR: 間 04/29 09:52
CoNsTaR: 非POD型別的全域static變數建構時間和內建全域static相同 04/29 09:54
CoNsTaR: 非 POD的 local static 變數第一次用到的時候建構 04/29 09:54
CoNsTaR: 但是全域和 static 變數都不保證建構時間 所以解構時間也 04/29 10:04
CoNsTaR: 無法確定 04/29 10:04
dreamboat66: 問題就是 這邊建構順序跟解構順序不一樣啊,不能用st 04/30 06:50
dreamboat66: ack push pop 想嗎? 04/30 06:50
CoNsTaR: 建構解構順序相反 這是規定 04/30 10:45
dreamboat66: log顯示沒有相反啊 @@ 04/30 20:18
steve1012: 有相反啊 只是你先call 了bar 的constructor 才print 05/11 08:23
steve1012: Foo 被call 才call bar 05/11 08:23