功能指针 - 2个选项

时间:2015-11-12 16:15:41

标签: c++ function-pointers

我想知道这两个函数(funfun2)之间有什么区别我知道fun2是函数指针但fun是什么?这是一样的,因为还有通过指针的函数名吗?

#include <iostream>

void print()
{
  std::cout << "print()" << std::endl;
}

void fun(void cast())
{
  cast();
}

void fun2(void(*cast)())
{
  cast();
}

int main(){
  fun(print);
  fun2(print);
} 

1 个答案:

答案 0 :(得分:5)

  

是否相同,因为还有通过指针的函数名?

是。这是继承自C.它仅仅是为了方便。 fun和fun2都采用了#34; void()&#34;。

类型的指针

允许存在这种便利性,因为当您使用括号调用函数时,没有AMBIGUITY。如果您有带括号的参数列表,必须才能调用函数。

如果禁用编译器错误,以下代码也将起作用:

fun4(int* hello) {
     hello(); // treat hello as a function pointer because of the ()
}

fun4(&print);

http://c-faq.com/~scs/cclass/int/sx10a.html

Why is using the function name as a function pointer equivalent to applying the address-of operator to the function name?