你能使用带参考的参考算子吗?

时间:2015-07-14 01:51:40

标签: c++

所以我最近开始学习c ++中的reference(&)和dereference(*)运算符,我有一个问题。

所以,我们假设我有一个假设的功能:

int fooBar(int foo, int bar)
{
    return foo+bar;
}

我可以将该函数称为带有引用运算符(&)的常规变量吗?

类似的东西:

int normalFunction(int &referencedFunction())
{
    return referencedFunction(someVariable);
}

3 个答案:

答案 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并且不带参数。