作者dreamboat66 (小嫩)
看板C_and_CPP
标题[问题] 建构解构的基本问题
时间Thu Apr 28 14:43:06 2016
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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1461825790.A.6BB.html
1F:推 CaptainH: 从来就没这回事吧 04/28 18:02
2F:推 CoNsTaR: auto 变数的解构顺序和建构顺序相反 04/29 09:51
3F:→ CoNsTaR: 内建型别static变数建构/解构时间就是程式开始/结束的时 04/29 09:52
4F:→ CoNsTaR: 间 04/29 09:52
5F:→ CoNsTaR: 非POD型别的全域static变数建构时间和内建全域static相同 04/29 09:54
6F:→ CoNsTaR: 非 POD的 local static 变数第一次用到的时候建构 04/29 09:54
7F:→ CoNsTaR: 但是全域和 static 变数都不保证建构时间 所以解构时间也 04/29 10:04
8F:→ CoNsTaR: 无法确定 04/29 10:04
9F:→ dreamboat66: 问题就是 这边建构顺序跟解构顺序不一样啊,不能用st 04/30 06:50
10F:→ dreamboat66: ack push pop 想吗? 04/30 06:50
11F:推 CoNsTaR: 建构解构顺序相反 这是规定 04/30 10:45
12F:→ dreamboat66: log显示没有相反啊 @@ 04/30 20:18
13F:推 steve1012: 有相反啊 只是你先call 了bar 的constructor 才print 05/11 08:23
14F:→ steve1012: Foo 被call 才call bar 05/11 08:23