对于这样的代码:
class foo{
void bar(){
static int var = 2;
}
};
我知道只有var
的实例才能用于foo
类型的所有对象,但是在创建foo之前C ++是否为变量var
分配内存?我问这个是因为即使在foo
被销毁之后,var也会在整个程序中存在。
答案 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纠正我)。