所以我最近开始学习c ++中的reference(&)和dereference(*)运算符,我有一个问题。
所以,我们假设我有一个假设的功能:
int fooBar(int foo, int bar)
{
return foo+bar;
}
我可以将该函数称为带有引用运算符(&)的常规变量吗?
类似的东西:
int normalFunction(int &referencedFunction())
{
return referencedFunction(someVariable);
}
答案 0 :(得分:1)
是。并且它们在使用时具有与函数指针相同的语义。
您可以传递这样的函数引用:
int foo_bar(int x, int y){return x + y;}
int pass_func(int(&f)(int, int)){
return f(some_var, some_other_var);
}
但是在C ++中更好的方法是使用模板参数:
template<typename Functor>
int pass_func(Functor &&f){
return f(some_var, some_other_var);
}
然后你可以传递函数指针/引用以及函数 objects ,如std::function
和lambda表达式。 (或定义int operator()(int, int)
的任何内容)
答案 1 :(得分:0)
例如:
#include <iostream>
int func(int value) {return 5 + value;}
int func2(int (*fp)(int)) { //pointer to function
return fp(5);
}
int func3(int (&fp)(int)) {
return fp(5);
}
int main() {
std:: cout << func2(func) << "\n" ;
std:: cout << func3(func) << "\n" ;
}
g ++输出
10
10
答案 2 :(得分:0)
听起来你想将一个函数传递给另一个函数。最简单的方法是:
#include <functional>
// ...
int normalFunction( std::function<int()> referenced_function )
{
return referenced_function();
}
std::function
的模板参数是返回类型,后跟括号中的参数列表。 int()
表示函数返回int并且不带参数。