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皆不可行,不在此展开。
其实吧,在使用中不可能出错,因为编译期间会报错的,此文章仅说明一下问题。
相关文章推荐
- 100条经典C语言笔试题目(下)----待补充
- C++可变长不确定类型的参数
- C++第四次作业
- 关于C语言的问卷调查
- 简单C++ log 类
- C#项目调用C++的DLL程序
- C/C++宏定义的可变参数
- C语言qsort的三种使用
- 学生成绩管理系统(c++)控制台应用程序
- C语言问卷调查
- 链队列的综合操作(详解、演示)C语言实现
- 快速排序的递归形式与非递归形式(C++版)
- 栈的应用--括号匹配的检验(C++)
- 【转载】c++ API 在屏幕上(或窗口中)的(x,y)坐标绘制一个点
- C语言宏定义和宏定义函数
- C++中的类的继承和组合
- C++ 中 cin cin.get() cin.getline()的用法
- 倒三角形代码C++
- c语言产生随机数的方法
- C++对象和类