静态方法中的常规和静态局部变量之间有什么区别吗?

时间:2014-11-20 20:13:58

标签: c++ static static-methods static-members

class A
{
    static void f(void)
    {
        int a;
        static int b;
    }
};

ab之间是否存在(正式或实际)差异?

2 个答案:

答案 0 :(得分: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;
}

afunc的所有实例之间共享,但b是每个实例的本地实例,因此输出为:

11 11
12 11
13 11

http://ideone.com/kwlra3

答案 1 :(得分:2)

是的,两者都不同。对于每次调用,a将被创建,而b将仅创建一次,并且对于A类型的所有对象都是相同的。我的意思是,所有对象共享一个b的内存。