作者darklady (Sylvanas)
看板C_and_CPP
標題Re: [問題] 對static的一點疑問
時間Thu Jan 29 22:05:24 2009
我又更改程式做一點測試但是結果更讓我疑惑了
1 #include <iostream>
2 using namespace std;
3
4 size_t count_calls()
5 {
6 static size_t ctr =
0;
7 return ++ctr;
8 }
9
10 size_t test_static()
11 {
12 static size_t ctr =
100;
13 return ctr;
14 }
15
16 int main()
17 {
18
19 for (
size_t i =
0; i !=
10; ++i)
20 cout << count_calls() << endl;
21 cout << test_static() << endl;
22
23 }
跑出的結果是
1
2
3
4
5
6
7
8
9
10
100
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.161.222.220
※ 編輯: darklady 來自: 118.161.222.220 (01/29 22:06)
1F:→ james732:那你覺得應該會是什麼樣子呢? 01/29 22:13
2F:推 ilovebbs:很....正常啊= = 不然你想要怎樣子的呢? 01/29 22:14
3F:推 softwind:顏色好漂亮歐~ 有工具嗎? 01/29 22:16
4F:推 Dreamer77:因為static的scope原本在count_calls後來test_static()? 01/29 22:42
5F:→ darklady:因為書上寫說static變數一但被建立,程式終止前都不會被 01/30 00:05
6F:→ darklady:銷毀 01/30 00:05
7F:→ darklady:但是count_calls()的ctr似乎跟test_static()的ctr一點關 01/30 00:08
8F:→ darklady:係都沒有 01/30 00:09
9F:→ james732:確實是完全沒有的 請當作它們是兩個獨立的變數 01/30 00:10
10F:→ firose:書上說的是 life time 你的問題是 scope 01/30 00:11
11F:→ darklady:To softwind:我的editor是vim,在pietty上複製ANSI碼 01/30 00:14
12F:→ darklady:喔喔,我懂了,他的scope只在function裡面,lifetime是程 01/30 00:17
13F:→ darklady:式結束前。 01/30 00:17
14F:→ darklady:謝謝j大f大 01/30 00:18
15F:推 meltice:還有static擺在global變數跟擺在function前面都是有意義的 01/30 14:02
16F:推 cobrasgo:原po你對變數的scope的觀念要再補強一下喔 01/31 00:21