静态成员函数的局部变量

Hol*_*mar 14 c++

今天,我们遇到了一个涉及多线程环境中静态成员函数的问题.我们问自己并且找不到令人满意的答案的问题是:静态成员函数的局部变量是否也是静态的?

// header

class A
{
  static int test();
}

// implementation
int A::test()
{
  int a = rand();
  int b = rand();
  int c = a + b;

  return c;
}
Run Code Online (Sandbox Code Playgroud)

假设您有两个线程都调用A :: test().当线程1 c = a + b进入线程2时,是否有可能进入test()并a通过分配rand()的新返回值来改变值,换句话说,两个线程是否都运行a,b和c的某些内存位置?

Ben*_*tto 18

不会.堆栈帧对于每个线程调用函数是独立的,并且每个都有自己的本地.(如果您正在访问实际的共享数据,例如类中的静态成员,则需要小心.)