如何检查函数指针是否存在 在C++中,我尝试用函数指针编写函数。如果为不存在的函数传递函数指针,我希望能够引发异常。我试图像处理普通指针一样处理函数指针,并检查它是否为null #include <cstddef> #include <iostream> using namespace std; int add_1(const int& x) { return x + 1; } int foo(const int& x, int (*funcPtr)(const int& x)) { if (funcPtr != NULL) { return funcPtr(x); } else { throw "not a valid function pointer"; } } int main(int argc, char** argv) { try { int x = 5; cout << "add_1 result is " << add_1(x) << endl; cout << "foo add_1 result is " << foo(x, add_1) << endl; cout << "foo add_2 result is " << foo(x, add_2) << endl; //should produce an error } catch (const char* strException) { cerr << "Error: " << strException << endl; } catch (...) { cerr << "We caught an exception of an undetermined type" << endl; } return 0; } #包括 #包括 使用名称空间std; 整数加1(常数整数和x){ 返回x+1; } int foo(常量int&x,int(*funcPtr)(常量int&x)){ 如果(funcPtr!=NULL){ 返回函数ptr(x); }否则{ 抛出“不是有效的函数指针”; } } int main(int argc,字符**argv){ 试一试{ int x=5; cout

如何检查函数指针是否存在 在C++中,我尝试用函数指针编写函数。如果为不存在的函数传递函数指针,我希望能够引发异常。我试图像处理普通指针一样处理函数指针,并检查它是否为null #include <cstddef> #include <iostream> using namespace std; int add_1(const int& x) { return x + 1; } int foo(const int& x, int (*funcPtr)(const int& x)) { if (funcPtr != NULL) { return funcPtr(x); } else { throw "not a valid function pointer"; } } int main(int argc, char** argv) { try { int x = 5; cout << "add_1 result is " << add_1(x) << endl; cout << "foo add_1 result is " << foo(x, add_1) << endl; cout << "foo add_2 result is " << foo(x, add_2) << endl; //should produce an error } catch (const char* strException) { cerr << "Error: " << strException << endl; } catch (...) { cerr << "We caught an exception of an undetermined type" << endl; } return 0; } #包括 #包括 使用名称空间std; 整数加1(常数整数和x){ 返回x+1; } int foo(常量int&x,int(*funcPtr)(常量int&x)){ 如果(funcPtr!=NULL){ 返回函数ptr(x); }否则{ 抛出“不是有效的函数指针”; } } int main(int argc,字符**argv){ 试一试{ int x=5; cout,c++,exception,pointers,exception-handling,function-pointers,C++,Exception,Pointers,Exception Handling,Function Pointers,检查NULL是可以的。但是不可能传递指向一个不存在的函数的指针。因此您不必担心这一点。尽管可以只声明一个函数而不定义它并传递它的地址。在这种情况下,您将得到链接器错误。它将自动抛出一个错误若要传递不存在的指针,若要声明指针,则必须使用null对其进行初始化,以避免垃圾值,所以与null进行比较并没有任何意义 您仍然需要检查,然后尝试分配一些功能(如add、sub等),如果需要,则确定,否则将再次显示前面提到的错误。\include #include<cstddef> #include

检查NULL是可以的。但是不可能传递指向一个不存在的函数的指针。因此您不必担心这一点。尽管可以只声明一个函数而不定义它并传递它的地址。在这种情况下,您将得到链接器错误。

它将自动抛出一个错误若要传递不存在的指针,若要声明指针,则必须使用null对其进行初始化,以避免垃圾值,所以与null进行比较并没有任何意义

您仍然需要检查,然后尝试分配一些功能(如add、sub等),如果需要,则确定,否则将再次显示前面提到的错误。

\include
#include<cstddef>
#include <iostream>
using namespace std;

int foo(const int& x, int (*funcPtr)(const int& x)) {
    if (*funcPtr != NULL) {
        return funcPtr(x);
    }
    else
    {
        cout << "not a valid function pointer";
    }
}
#包括 使用名称空间std; int foo(常量int&x,int(*funcPtr)(常量int&x)){ 如果(*funcPtr!=NULL){ 返回函数ptr(x); } 其他的 {
你能发布调用代码吗?你是否至少通过传递
NULL
nullptr
作为函数指针的参数来测试它?@RSahu我添加了更多关于如何使用它的代码。@CaptainObvlious我更关心传递一个不存在的函数,而不是传递一个NULL指针。我只是想弄清楚怎么做。@John,如果未声明,则带有
add_2
的行将导致编译器错误,如果已声明且未定义,则会导致链接时间错误。为什么不可能传递指向不存在的函数的指针?@juanchopanza:嗯,您可以使用类似
memcpy()的东西
将垃圾复制到函数指针对象中。除此之外,无法构造函数指针值(空指针除外)这并不指向实际的函数。@KeithThompson难道你不能只传递一个未初始化的函数指针吗?因此,总之,这个答案的第二句和第三句是错误的。@KeithThompson:或者只是在函数指针类型中强制转换一个任意整数“如果您传递的是不存在的指针,它将自动抛出错误”标准没有提到“抛出错误”。这是未定义的行为。任何事情都可能发生。