成员函数中的C++静态变量

fur*_*her 2 c++ static object

所以对于像这样的代码:

class foo{
  void bar(){
     static int var = 2;
  }
};
Run Code Online (Sandbox Code Playgroud)

我知道只有在var所有类型对象的实例上,foo但是var在创建foo之前C++是否为变量分配内存?我问这个是因为即使在foo被销毁之后,var也会在整个程序中存在.

das*_*ght 5

var即使在创建foo之前,C++是否为变量分配内存?

是的,从某种意义上说,它var最终会占用的内存是预先保留的.当2写入var内存的常量值是实现定义的.标准保证唯一的事情是它会在你打电话之前的某个时刻发生foo::bar().

如果使用带副作用的表达式初始化静态变量(例如,通过进行函数调用),则在第一次执行函数时将执行此调用.

在foo被销毁之后,var将在整个程序中存在.

var将独立于foo您的程序可能创建的任何实例而存在.当您foo::bar()随时致电时,您将获得var您的程序分配给它的最后一个值.