您的位置:首页 > 编程语言 > C语言/C++

C++注意事项--02 函数指针用于带默认参数的函数

2016-04-21 19:41 369 查看

一 引言:

在前面文章(Qt学习记录--05 函数指针以及类函数指针用于Qt信号槽)中简要描述了函数指针的使用及在Qt信号槽的应用,本次主要说一下,它的某一方面的注意事项。

在声明函数时,在特定场景下,我们会为函数的某个(些)入参赋一个默认值,这样在以后的使用中,可以少写或者根本不写传参,这给我们带来了便利,但它与函数指针的结合会有什么样的效果呢?本文将对此进行简单讲述。

二 详解:

首先举个栗子(^_^):

#include <iostream>

typedef int(*PFUNC)(int, int);

int Add(int a, int b = 10)
{
return (a + b);
}

int main()
{
PFUNC fun1 = Add;
std::cout << fun1(10, 10) << std::endl;

system("pause");
return 0;
}


上面的使用很正确,但是也失去了带默认参数函数的优势,但假如我们将函数指针的定义变为:
typedef int(*PFUNC)(int, int = 10);


那么在VS2015下会报如下的错误:



可以看到在声明函数指针时,不可添加默认参数。

那么,我们在调用时少传参呢?即:

PFUNC fun1 = Add;
std::cout << fun1(10) << std::endl;
在VS2015下,会报如下错误:



所以,使用函数指针此路不通。这是 C++ 语言的限制:默认参数只能使用函数声明时。当使用函数指针取其地址时,默认参数也是不可见的。

可能有人会问使用function是否可行呢?经测试这也是行不通的,使用std::function和boost::function皆不可行,不在此展开。

其实吧,在使用中不可能出错,因为编译期间会报错的,此文章仅说明一下问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: