C++ C++;成员函数中的静态变量
对于这样的代码:C++ C++;成员函数中的静态变量,c++,object,static,C++,Object,Static,对于这样的代码: class foo{ void bar(){ static int var = 2; } }; P> >我知道,对于所有类型的对象,只有< var >代码> > Foo,但是C++在FoO创建之前就为变量 var >代码分配内存吗?我这样问是因为即使在foo被销毁之后,var仍将在整个程序中存在。var将在第一次调用foo:bar()时构造。当程序终止时,它将被销毁 请注意,foo是一个类,而不是对象实例,因此foo永远不会被“销毁” 更新:标准规定变量
class foo{
void bar(){
static int var = 2;
}
};
<> P> >我知道,对于所有类型的对象,只有< <代码> var >代码> > Foo,但是C++在FoO创建之前就为变量<代码> var >代码分配内存吗?我这样问是因为即使在foo
被销毁之后,var仍将在整个程序中存在。var
将在第一次调用foo:bar()时构造。当程序终止时,它将被销毁
请注意,foo
是一个类,而不是对象实例,因此foo
永远不会被“销毁”
更新:标准规定变量的存储在程序开始时分配(感谢broncoAbierto纠正了我的错误)
C++在变量创建之前是否为变量<代码> var >代码分配内存?< /P> 是的,从某种意义上说,
var
的值最终将占用的内存是预先保留的。当2
的常量值写入var
的内存时,将定义实现。标准保证的唯一一件事是,在调用foo::bar()
之前,它会在某个时刻发生
如果您使用带有副作用的表达式初始化静态变量(例如,通过进行函数调用),则此调用将在您第一次执行函数时执行
在foo被销毁后,var将在整个程序中存在
var
将独立于程序可能创建的foo
的任何实例而存在。在任何时候调用foo::bar()
时,都会得到程序分配给它的var
的最后一个值。在第一次调用foo::bar()之前。
?如果初始值有副作用呢?(允许在C++中,而不是在C中)这些副作用是否发生在不可预测的时间?内存分配不是初始化。初始化(先前分配的内存区域)将在第一次调用函数时发生。应该注意的是,内存将在程序启动时静态分配,而不是使用malloc
或类似的方法。@BenVoigt啊,这些讨厌的副作用!谢谢foo
不会被“销毁”,但其静态成员是程序反初始化的一部分。对于int
,这当然是一个不可操作的操作。@5gon12eder:是的,但操作将foo的破坏称为关机前发生的事情。标准规定,变量的存储在程序开始时分配@布朗科亚比尔托:这就是为什么我对它避而不谈。谢谢我会更新的。@broncoAbierto:那个网站上说的。但是标准怎么说呢?