Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;成员函数中的静态变量_C++_Object_Static - Fatal编程技术网

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:那个网站上说的。但是标准怎么说呢?