[英]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.