spe*_*Teh 6 c++ static initialization
有没有办法初始化函数中的变量并保存其值以进行下一次函数调用?
我在qt中进行应用,我有一个功能与信号连接.我希望该函数中的变量在另一个变量达到目标后发生变化.这是该函数的主体:
void objekt::advance(int phase)
{
if(!phase) return;
QPointF location = this->pos();
if (int(location.x())==200 || int(location.x())==-200)
{
smijer=-smijer;
}
setPos(mapToParent(smijer,0));
}
Run Code Online (Sandbox Code Playgroud)
我将smijer变量定义为static int.但我不知道如何在程序启动时只初始化一次,以及如何在每次调用函数后保持其新值.
mec*_*cid 11
你的答案基本上都在你的问题中.静态变量(函数的类成员或局部变量)仅在终止时初始化一次.例如;
#include <iostream>
int foo () {
static int sVar = 5;
sVar++;
return sVar;
}
using namespace std;
int main () {
int iter = 0;
do {
cout << "Svar :" foo() << endl;
iter++;
}while (iter < 3);
}
Run Code Online (Sandbox Code Playgroud)
如果你编写一个这样的程序,它将打印出Svar值,就像;
Svar :6
Svar :7
Svar :8
Run Code Online (Sandbox Code Playgroud)
所以当你看到我们调用foo函数三次时,静态变量的初始化只进行一次.
如果smijer是 class 的成员objekt,则这样做:
对象.h:
class objekt
{
...
static int smijer;
...
};
Run Code Online (Sandbox Code Playgroud)
对象.cpp
int objekt::smijer = YOUR_INITIALIZATION_VALUE;
Run Code Online (Sandbox Code Playgroud)
另一方面,如果您想要/需要smijer成为全局变量,请这样做:
全局.h:
extern int smijer;
Run Code Online (Sandbox Code Playgroud)
globals.cpp //或者另一个.cpp文件
int smijer = YOUR_INITIALIZATION_VALUE;
Run Code Online (Sandbox Code Playgroud)
尽管在这种情况下我会将它放在命名空间中。在这种情况下,它没有声明为静态,但它确实具有程序的生命周期。