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

时间:2014-09-11 20:53:36

标签: c++ object static

对于这样的代码:

class foo{
  void bar(){
     static int var = 2;
  }
};

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

2 个答案:

答案 0 :(得分:5)

  

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

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

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

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

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

答案 1 :(得分:3)

var将在第一次调用foo:bar()时构造。程序终止时将被破坏。

请注意foo是一个类,而不是对象实例,因此foo永远不会被“销毁”

更新:标准表示在程序开始时分配变量的存储空间。 en.cppreference.com/w/cpp/language/storage_duration - (感谢broncoAbierto纠正我)。