C++ 从函数内部更改函数指针的目标是否有任何问题?(C+;+;)
我有一个程序,它定义了从所述指针调用的函数中更改函数指针的目标函数,如下所示:C++ 从函数内部更改函数指针的目标是否有任何问题?(C+;+;),c++,function,pointers,function-pointers,C++,Function,Pointers,Function Pointers,我有一个程序,它定义了从所述指针调用的函数中更改函数指针的目标函数,如下所示: void increment(int&); void superincrement(int&); void (*fooncrement)(int&); int main() { int j = 0; fooncrement = increment; while (true == true) { fooncrement(j); } } voi
void increment(int&);
void superincrement(int&);
void (*fooncrement)(int&);
int main() {
int j = 0;
fooncrement = increment;
while (true == true) {
fooncrement(j);
}
}
void increment(int& i) {
static int counter = 0;
i++;
if (counter > 7)
fooncrement = superincrement;
counter++;
}
void superincrement(int& i) {
i += 23;
}
通过MSVC调试器的快速运行,可以看出程序或多或少地按照预期工作。但是,如果我在更复杂的环境中尝试这样的方法,是否有任何问题不是很明显,可能会表现出来?不,不应该有任何问题。并不是说一旦你打了电话,它就会粘在指针上。这是定义明确的
事实上,这种技术通常用于实现状态机。这不是线程安全的,但对于单线程应用程序来说,没有问题。如果你不知道线程是什么,那么你没有使用它,所以你没有问题 更高级的程序使用多个“线程”,每个线程基本上都是它自己的程序,但它们一起工作。想象一下,如果您有
int main()
,但也有int main1()
,int main2()
,int main3()
,并且它们都同时运行。你的程序可以同时做四件事!但是,如果一个线程更改了fooncrement
,则在其他线程看到更新的值之前会有一点延迟。同时,他们会使用旧值,这可能会导致问题