2014-11-20 32 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

相关问题