C:MSDN说“可以为指向函数的指针提供默认参数”,但这是真的吗?

时间:2013-11-29 04:56:16

标签: c++ visual-c++ msdn default-arguments

考虑this MSDN文章('默认参数')和以下代码:

#include <stdio.h>

void print(int x) {
  printf("%d\n", x + 537);
}

typedef void (*Func)(int x = 0);

int main() {
  Func f = print;
  f();
  return 0;
}

文章声称“默认参数可以用于指向函数的指针。例如:int (*pShowIntVal)( int i = 0 );”。据我所知,这意味着上面的代码应该成功编译。但是,它没有:

a.cpp
a.cpp(7) : error C2383: 'Func' : default-arguments are not allowed on this symbol
a.cpp(11) : error C2198: 'Func' : too few arguments for call

看起来我误解了这篇文章。重点是什么,正确的解释是什么?

1 个答案:

答案 0 :(得分:2)

默认参数是函数声明的一部分,但它不是类型的一部分。所以你可以写:

void f(int x = 0);

但f的类型仍然是

void(int x)

因此,指向函数类型的指针不能包含默认参数。

(参考:§8.3.6/ 9 [dcl.fct.default]:“默认参数不是函数类型的一部分。”)