2014-11-20 54 views
-3
class A 
{ 
    static void f(void) 
    { 
     int a; 
     static int b; 
    } 
}; 

ab之間是否有任何(正式或實際)區別?靜態方法中的正常和靜態局部變量之間是否有區別?

+1

'b'將在呼叫中保留其值,而'a'將每次重新初始化... – dlf 2014-11-20 20:16:17

+1

http://en.c ppreference.com/w/cpp/language/storage_duration – 2014-11-20 20:17:06

+1

當你嘗試過時發生了什麼? – Caleb 2014-11-20 20:21:23

回答

2

是的,兩者是不同的。對於每個呼叫a將被創建,而b將只創建一次,對於A類型的所有對象都是相同的。同樣我的意思是,所有的對象共享一個b的單個內存。

+0

這是否意味着無論創建多少個「A」對象,該值都保持不變? – 2014-11-20 20:17:25

+0

是的,它總是一樣的。 – Venkatesh 2014-11-20 20:18:37

+0

@laiello這是什麼靜態手段(這裏):它不依賴於對象;全班同樣如此。 – deviantfan 2014-11-20 20:19:09

4

是,考慮以下因素:

#include <iostream> 
using namespace std; 

class A 
{ 
    public: 
    static void func() 
    { 
     static int a = 10; 
     int b = 10; 
     a++; 
     b++; 
     std::cout << a << " " << b << endl; 
    } 
}; 

int main() { 
    A a, b; 
    a.func(); 
    b.func(); 
    a.func(); 
    return 0; 
} 

a跨的func所有實例共享,但b是本地的每個實例,所以輸出:

11 11 
12 11 
13 11 

http://ideone.com/kwlra3

相關問題