2015-06-03 35 views
3
static void Foo() 
{ 
    int bar = 0; 
} 

bar默認爲靜態? Standard對此有何評論?默認情況下,靜態函數中的所有變量都是靜態的嗎?

+3

否。當您使用關鍵字時,變量僅爲靜態。 – NathanOliver

+1

一個靜態函數只是一個函數'local',所以它不能被其他對象引用。換句話說,如果這個函數是在foo.cc中定義的,bar.cc就不能調用這個函數。 –

+1

這個問題證明,重新使用關鍵字'static'來隱藏函數是一個值得懷疑的想法。也許,引入一個關鍵字「隱藏」會是一個更好的方法。 – dasblinkenlight

回答

8

不,使用C++編寫靜態變量的唯一規定是static keyword

例如,如果你改變Foo到:

static void Foo() 
{ 
    int bar = 0; 

    bar++; 
    cout << bar << endl; 
} 

然後調用:

Foo(); 
Foo(); 

因爲bar靜態輸出將是:

然而,如果你聲明barstatic這樣的:

static void Foo() 
{ 
    static int bar = 0; 

    bar++; 
    cout << bar << endl; 
} 

輸出將在事實上是:

+0

您的打印報告絆了我一秒鐘。我想不出爲什麼酒吧等於十一:-) – Evorlor

+1

@Evorlor現在你說這是有點混亂。我編輯過在'endl'中添加。 –

5

沒有, au中分配靜態函數中的變量自動存儲默認情況下。

static函數和static變量代表碰巧重用C的語法相同的關鍵字正交的概念和C++

  • 製作功能static告訴編譯器從其他的翻譯單元
  • 定義的函數隱藏它
  • 使變量static告訴編譯器將該變量的數據放置在靜態存儲器中。

使用static作爲函數與靜態存儲區無關。

相關問題