【问题标题】:callback function: difference between void(*func)(int) and void(func)(int)回调函数:void(*func)(int) 和 void(func)(int) 的区别
【发布时间】:2014-09-20 21:38:07
【问题描述】:

假设我有一个函数:

void foo (int i){
    cout << "argument is: " << i << endl;
}

我将这个函数传递给:

void function1 (void(callback)(int), int arg){
    callback(arg);
}

void function2 (void(*callback)(int), int arg){
    callback(arg);
}

这两个函数是否相同?两者有区别吗?

【问题讨论】:

  • 完全相同。参数中的函数类型调整为指针。
  • 与声明接受int *xint x[] 的函数相同;您不能按值传递函数或数组;没有显式 * 的版本只是指针版本的语法糖。

标签: c++ c function callback


【解决方案1】:

规则是,在函数的参数列表中,声明为函数类型的参数被调整为具有指向函数类型的指针(类似地,可能更广为人知的是,声明为 @987654321 的数组类型的参数@" 被调整为具有“指向T”的类型。允许声明符中的冗余括号,但忽略。

因此,在

void function1 (void(callback)(int), int arg);
void function2 (void (*callback)(int), int arg);
void function3 (void callback(int), int arg);

这三个函数的第一个参数具有完全相同的类型——“指向(int)函数的指针返回void”。

【讨论】:

    【解决方案2】:

    它们是相同的。具有函数类型的参数被转换为指向函数类型的指针。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多