C++中带有默认参数的函数指针

36
C++在处理具有默认参数的函数指针时是如何处理的?
如果我有以下代码:
void foo(int i, float f = 0.0f);
void bar(int i, float f);


void (*func_ptr1)(int);
void (*func_ptr2)(int, float);
void (*func_ptr3)(int, float = 10.0f);

我该使用哪些函数指针来关联哪些函数呢?


C++不允许在函数指针声明中使用默认参数。你的func_ptr3声明是不合法的。因此这里没有什么可以“处理”的。 - AnT stands with Russia
2个回答

35

无论是foo()还是bar()都只能被分配给func_ptr2

§8.3.6/2

默认参数不是函数类型的一部分。 【例如:】

int f(int = 0);

void h() {
    int j = f(1);
    int k = f(); // OK, means f(0)
}

int (*p1)(int) = &f; 
int (*p2)() = &f; // error: type mismatch

--结束示例]


1
因为默认参数实际上是由编译器实现的? - YeenFei
1
因为默认参数不被考虑为类型,所以 int f(int)int g(int=0) 具有相同的类型。 - Georg Fritzsche
1
那就排除了func_ptr1。那func_ptr3呢? - Daniel Daranas
1
这也排除了#3 - 默认参数仅允许用于函数声明。 - Georg Fritzsche

1

指向函数的指针不能提供默认参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接