[英]assignation to the static variable the result of function which changes this static variable inside
我想知道以下代碼中的標記行是否正確。 因為在這一行中,該函數的結果分配給靜態變量prevRecCallResult
( 我將其稱為“ 普通分配 ” ),該變量在此函數內部進行了更改( 我將其稱為“ 內部分配 ” )。 是否可以確保在執行“ 普通分配 ”時完成“ 內部分配 ”?
int f(int _n)
{
if (_n >= 1)
{
static int prevRecCallResult;
prevRecCallResult = f(_n - 1); //<-- Is this line Ok?
return prevRecCallResult + 1;
}
else
return _n;
}
我知道,標准說,會出現一個序列點:
在函數返回時,將返回值復制到調用上下文中。
,但我不確定,這就是我的問題的答案。
考慮到我收到的答復,我應該澄清一下我的問題:
實質是:確實, 在 f(_n - 1)
完成之前 ,賦值表達式(在標記行中)未使用 prevRecCallResult
(即,未被賦值表達式占用f(_n - 1)
嗎? (因此,直到這一刻,對於f(_n - 1)
內部的任何賦值, prevRecCallResult
都是完全免費的嗎?)
static int prevRecCallResult;
prevRecCallResult = f(_n - 1); //<-- Is this line Ok?
您的代碼完全可以。 但是只是想讓您記住static int prevRecCallResult;
只執行一次。 但是prevRecCallResult = f(_n - 1);
在每個函數調用之后分配。 一旦函數返回prevRecCallResult
的時間,函數的返回值將在其余函數中使用。
從函數返回后,靜態變量不會消失。 因此, prevRecCallResult
將不會在函數調用之間死亡。
我記得所有靜態變量以及C和C ++中的所有全局變量都自動分配為其類型的默認值-在此示例中,“ static int prevRecCallResult”的默認值將為0。因此,您的擔心是沒有根據的(您可以輕松地使用調試器進行檢查)。 同時,我不明白為什么在此代碼中使用靜態變量...是只是簡化的代碼問題,還是試圖在遞歸函數的自動變量上節省內存的真實代碼?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.