C++:为函数的下一次调用保存变量值

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函数三次时,静态变量的初始化只进行一次.


Mat*_*ips 1

如果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)

尽管在这种情况下我会将它放在命名空间中。在这种情况下,它没有声明为静态,但它确实具有程序的生命周期。