/**
* @file test.cpp
* @author chenjiashou(chenjiashou@baidu.com)
* @date 2017/08/20 15:54:27
* @version $Revision$
* @brief
*
**/ #include <iostream> int print(int a = , int b = ); int main() {
print();
print(-);
return ;
} //int print(int a = 1, int b = 2) {// 编译错
int print(int a, int b) {
std::cout << a << "," << b << std::endl;
}

结果:

,
-,

首先看上述的代码,print函数是带有默认参数的。

所以调用print(), print(-1)都可以准确的输出。

这种默认参数的情况会带来有些便利。(比如初始化一个商品对象,在99%的情况在都是正常的,那么这个商品是否正常的标记就可以默认为1,特殊的1%情况,再加上)

但是有以下三个要注意的情况。

1. 默认参数只能放在函数声明处或者定义处,能放在声明处就放在声明处 。

上述代码把那行注释打开,默认参数在声明和定义处都有了,那么就会有编译错误。(两次默认赋值是不被允许的。)

a. 大部分情况,别人调用你的代码只能看到函数声明,如果你写在定义处,别人根本不知道你的默认参数是什么。

b.如果你是在定义处写的默认参数,那么你在使用该函数前就需要把函数定义放在前面。不然编译阶段通过无默认参数的函数声明无法确定这个函数是带默认参数的。

所以,默认参数写在声明处啊。^ ^

2.如果某个参数是默认参数,那么它后面的参数必须都是默认参数

因为非默认参数的参数必须要给出具体值,而调用函数传递参数的时候是从左到右的,所以非默认参数前面的都必须要传值进来。

那么默认参数后面的当然也得都为默认参数。

3.不要重载一个带默认参数的函数

看下这个函数:

class Test
{
public:
int func(int a)
{
return a;
} int func(int a, int b = )
{
return a + b;
}
} ;

你调用func(1)的时候,谁知道你想调用哪一个。

最新文章

  1. IOS各种集合遍历效率对比
  2. Codeforces Round #248 (Div. 2) A. Kitahara Haruki&#39;s Gift
  3. PHP设计模式之策略模式
  4. javascript笔记——date以及datetime的比较
  5. AbStract 和Interface 方法是否能用Static修饰,为什么?
  6. Codeforces2B - The least round way(DP)
  7. AWK调用SHELL,并将变量传递给SHELL
  8. VC版本的MakeObjectInstance把WNDPROC映射到类的成员函数
  9. fuel iso光盘刻录机usb Driver 烧录
  10. notepad++中的zencoding的快捷键修改[转]
  11. A simple Test Client built on top of ASP.NET Web API Help Page
  12. vmstat 命令详解
  13. 树莓派中QT实现串口通讯
  14. [Swift]LeetCode801. 使序列递增的最小交换次数 | Minimum Swaps To Make Sequences Increasing
  15. Maven构建 SpringMVC+Spring+MyBatis 环境整合
  16. snmp v3的安全配置 snmp认证与加密配置(53)
  17. java导出数据EXCEL的工具类(以spring-webmvc-4.0.4jar为基础)
  18. 透彻理解Spring事务设计思想之手写实现
  19. Hightchart 技巧
  20. 浅谈QT打印功能实现

热门文章

  1. 为什么运行PHP就会出现404错误?
  2. Asp.net WebApi下载文件
  3. Linux--nginx域名绑定-url rewrite
  4. 一款CSS3仿Google Play的垂直菜单
  5. 自定义控件?试试300行代码实现QQ侧滑菜单
  6. c++ String去除头尾空格
  7. 动态为页面添加CSS样式文件引用
  8. 内存管理 初始化(四)mem_init bootmem 迁移至伙伴系统
  9. ZooKeeper学习之-Zookeeper简单介绍(一)
  10. Android 布局学习之——LinearLayout的layout_weight属性