首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C: MSDN说“可以为指向函数的指针提供默认参数”,但这是真的吗?

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

Stack Overflow用户
提问于 2013-11-29 04:56:16
回答 1查看 1.4K关注 0票数 4

请考虑 MSDN文章(“默认参数”)和以下代码:

代码语言:javascript
复制
#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 );”。正如我所理解的,这意味着上面的代码应该成功编译。然而,它没有:

代码语言:javascript
复制
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

看来我误解了这篇文章。有什么意义,正确的解释是什么?

EN

回答 1

Stack Overflow用户

发布于 2013-11-29 05:06:55

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

代码语言:javascript
复制
void f(int x = 0);

但是f的类型仍然是

代码语言:javascript
复制
void(int x)

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20278621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档