【问题标题】:Is there any difference between normal and static local variables in static methods?静态方法中的普通和静态局部变量有什么区别吗?
【发布时间】:2014-11-20 20:13:58
【问题描述】:
class A
{
    static void f(void)
    {
        int a;
        static int b;
    }
};

ab 之间有什么(正式的或实际的)区别吗?

【问题讨论】:

  • b 将在调用过程中保持其值,而 a 将在每次调用时重新初始化...
  • 你尝试的时候发生了什么?
  • 是的,a 分配在堆栈上,b 分配在数据段中。函数是 static 的事实不会影响其中变量的“行为”(即,对于非静态函数来说是相同的)。

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


【解决方案1】:

是的,请考虑以下几点:

#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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这是否意味着无论创建多少个“A”对象,值都保持不变?
    • 是的,它总是一样的。
    • @laiello 这就是静态的意思(在这里):它不依赖于对象;它不依赖于对象。全班都一样。
    • 请注意,即使f 不是静态的,这也是正确的。
    • 明白了。出于某种原因,静力学一直是一个难以理解的概念。
    猜你喜欢
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 2011-02-25
    • 2011-04-23
    • 2016-08-29
    • 2016-07-26
    • 2011-07-11
    相关资源
    最近更新 更多