繁体   English   中英

C ++指向函数的指针,初学者问题

[英]C++ pointer to functions, Beginner Question

我想问一下C ++中的指针

我有一些简单的代码:

int add(int a, int b){
 return a+b;
}

int runner(int x,int y, int (*functocall)(int, int)){
 return (*functocall)(x,y);
}

现在,假设我使用这种方式调用这些函数:

cout<<runner(2,5,&add);

或者可能

cout<<runner(2,5,add);

有什么不同吗? 因为当我尝试时,结果是相同的,没有错误。

非常感谢

根据C ++标准(4.3 / 1),函数将隐式地转换为指针。 没有区别。 但是,此转换从不适用于非静态成员函数。 对于他们你应该明确地写&

没有区别。 为了与获取指针的其他方式保持一致,您可以使用& ,但名称本身没有其他含义,因此假定它意味着“获取地址”。

它与作为数组第一个元素地址的数组变量名非常相似。

不,在这种特殊情况下没有区别。 任何一个都给你功能的地址。

但请注意,在C ++中,获取指向成员函数的指针需要使用“&”运算符。

请注意,您可以引用函数

int runner(int x,int y, int (&functocall)(int, int)){
 return functocall(x,y);
}

现在使用&add调用它将不再起作用,因为您尝试将函数引用绑定到指针而不是函数。 有时这在使用模板时会闪耀

template<typename T>
int runner(int x,int y, T &functocall, T otherfunc){
 return functocall(x,y) + otherfunc(y, x);
}

现在使用runner(10, 20, add, add)调用它将会失败,因为尝试将T推导到函数指针和函数类型(传递给引用参数时不会衰减到指针!)。

我相信第二个调用会自动解析为编译器中的第一个调用...

这是因为没有这样的对象(就表达式而言)作为函数 ,只有指向函数的指针 当你想将函数传递给你的函数时,你唯一可以传递的就是指针,所以编译器会为你做这个演员

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM