[爆卦]static意思是什麼?優點缺點精華區懶人包

為什麼這篇static意思鄉民發文收入到精華區:因為在static意思這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者OpenMX (材料探索者)看板C_and_CPP標題[問題] 請問static是什麼意思......

static意思 在 Adelaide??? Instagram 的最佳貼文

2020-11-02 11:58:31

我總喜歡,倚傍在你胸膛上; 因為這樣,我總感到一種深溢的溫度…… 你在我眼中,就是高大而強壯; 我總覺得,你的身型很標準,很吸引…… 你說你並不強壯,只是肥胖; 但在我眼裡,你就是俊美; 從那個角度看,都那樣好看…… 一個人去看另一個人,都有其獨特的目光; 視覺,從來都建基於, 我對你愛的深度...





我又來問問題了-.-

近來在看個計算材料的code :
http://staff.aist.go.jp/t-ozaki/b-bop/b-bop.html


裡面用了一堆 static這修飾

看了一堆書 也問了人 還是搞不清處static到底是什麼意思啊..

又static在科學計算上有什麼好處 以至於這作者要大量使用...

fortran確定是沒有對應這語法的 =.=


煩請高手回答 謝謝!!!

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.208.54.44

> -------------------------------------------------------------------------- <

作者: freesamael (燒賣) 看板: C_and_CPP
標題: Re: [問題] 請問static是什麼意思...
時間: Fri Oct 5 02:41:23 2007

※ 引述《OpenMX (材料探索者)》之銘言:
: 我又來問問題了-.-
: 近來在看個計算材料的code :
: http://staff.aist.go.jp/t-ozaki/b-bop/b-bop.html
: 裡面用了一堆 static這修飾
: 看了一堆書 也問了人 還是搞不清處static到底是什麼意思啊..
: 又static在科學計算上有什麼好處 以至於這作者要大量使用...
: fortran確定是沒有對應這語法的 =.=
: 煩請高手回答 謝謝!!!

在 C/C++ 中,static 修飾詞在不同地方的意義不同。我看你附上的程式碼只有看到
加在 local variable 之前的,那樣的寫法稱作 static local variable。

如果你對 c 語言的 scope 有點基礎概念,應該知道 local variable 只在 { } 區間
內有效,過了就消失。也就是說,它的壽命就只有在進入區間內到離開區間前。
一個區間可能是一個 function,或是 if、for、while,甚至是你在 function 內任何
地方隨便寫一組 { } 括弧也會成為一個區間。

Static local variable 的壽命跟 global variable 一樣長,但是只在宣告的 { }
區間內是可視的。也就是只有在 { } 區間內可以存取,但是其值在離開區間後仍會
保留,且初始化行為只會有一次。

以下例來說,function 被執行幾次,count 就會是多少。

void function()
{
static count = 0; // count 只有第一次會初始化成 0
count++;
}

你可能需要一本 c 語言的書籍當作輔助工具,不然類似的問題還會遇到很多。

--
Licensed under CC2.5(TW) by-sa, Samael Wang.
http://creativecommons.org/licenses/by-sa/2.5/tw/

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.82.153

> -------------------------------------------------------------------------- <

作者: mystea (mystea) 看板: C_and_CPP
標題: Re: [問題] 請問static是什麼意思...
時間: Fri Oct 5 15:44:02 2007

電腦的記憶體在執行程式時, 會被分成三區: permanent, stack 和 heap.
permanent區的變數會一直活到程式執行完, stack區的變數則是在{}執行完就被移除.

C的default是把global variable都放到permanent, local variable都放到stack.
但是有時候, 你希望local variable不要那麼短命...這時候加一個修飾詞static,
local variable就會被放到permanent variable裡了.

default會這樣定不是全然沒有道理的. global variable既然是大家都看得到的變數,
活到程式結束是天經地義. 而local variable既然在{}外的程式都看不到他, 很自然的選
則就是在離開{}後就把他清掉, 好節省記憶體. 只是在一些非常時期, 我們不希望{}外的
程式去碰那個變數, 卻又希望他能夠用來保存有用的資訊, 這個時候就要加上static了.

※ 引述《freesamael (燒賣)》之銘言:
: ※ 引述《OpenMX (材料探索者)》之銘言:
: : 我又來問問題了-.-
: : 近來在看個計算材料的code :
: : http://staff.aist.go.jp/t-ozaki/b-bop/b-bop.html
: : 裡面用了一堆 static這修飾
: : 看了一堆書 也問了人 還是搞不清處static到底是什麼意思啊..
: : 又static在科學計算上有什麼好處 以至於這作者要大量使用...
: : fortran確定是沒有對應這語法的 =.=
: : 煩請高手回答 謝謝!!!
: 在 C/C++ 中,static 修飾詞在不同地方的意義不同。我看你附上的程式碼只有看到
: 加在 local variable 之前的,那樣的寫法稱作 static local variable。
: 如果你對 c 語言的 scope 有點基礎概念,應該知道 local variable 只在 { } 區間
: 內有效,過了就消失。也就是說,它的壽命就只有在進入區間內到離開區間前。
: 一個區間可能是一個 function,或是 if、for、while,甚至是你在 function 內任何
: 地方隨便寫一組 { } 括弧也會成為一個區間。
: Static local variable 的壽命跟 global variable 一樣長,但是只在宣告的 { }
: 區間內是可視的。也就是只有在 { } 區間內可以存取,但是其值在離開區間後仍會
: 保留,且初始化行為只會有一次。
: 以下例來說,function 被執行幾次,count 就會是多少。
: void function()
: {
: static count = 0; // count 只有第一次會初始化成 0
: count++;
: }
: 你可能需要一本 c 語言的書籍當作輔助工具,不然類似的問題還會遇到很多。

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 76.170.235.113
previewslave:大推!推!推!推推推!!!!!!! 10/05 19:35
seiyaku:那heap呢? 10/05 21:21
dh3014:動態配置記憶體時會用到heap 10/05 21:22
SILee:malloc()之類的function就是用heap來存取data 10/06 00:40
seiyaku:Thanks 10/06 14:45
cutesung2:大推好文~! 10/06 15:18
sunneo:推 10/06 15:57

> -------------------------------------------------------------------------- <

作者: meltice (三億兩千萬大散戶) 看板: C_and_CPP
標題: Re: [問題] 請問static是什麼意思...
時間: Sat Oct 6 11:19:28 2007

in C/C++

static variable就像是global變數
差別只在它的visible範圍只在該scope內
所以static變數的初始值就是0
當然你也可以像global變數一樣指定初始值給它

static function表示該function的visible範圍只在該.cpp內
可以避免污染global namespace
所以很多個.cpp內可以有同樣名稱的static function

在C++ class之中

static member variable在該class中始終只存在一份
不會因為new delete而有數量上的變化
需要在global定義初始值
不用宣告實體object即可存取該值

static member function
只允許存取static member variable或function
不用宣告實體object即可呼叫該function

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.245.93.33

你可能也想看看

搜尋相關網站