Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.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++_Function_Pointers_Function Pointers - Fatal编程技术网

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
,则在其他线程看到更新的值之前会有一点延迟。同时,他们会使用旧值,这可能会导致问题