c++之带默认形参值的函数
2015-08-22 15:15
537 查看
先来个例子:
需要注意的地方:
1.若函数具有多个形参,则默认形参值必须自右向左连续地定义,并且在一个默认形参值的右边不能有未指定默认值的参数。这是由于c++语言在函数调用时参数是自右向左入栈这一约定决定的。
eg:int f(int a, float b=5.0, char c='c');
2.在调用一个函数时,如果省去了某个实参,则直到最右端的所有实参都得省去(当然,与其对应的形参要有默认值)。
eg:int f(int a, float b=5.0, char c='c', int d=10); f(9,4.5) <=> f(9,4.5,'c',10).
3.默认形参值的说明必须出现在函数调用之前。而且,如果存在函数原型,则形参的默认值应在函数原型中指定;否则在函数定义中指定。另外,若函数原型中已给出了形参的默认值,则在函数定义中不得重复指定,即使所指定的默认值完全相同也不行。
eg:
4.在同一个作用域,一旦定义了默认形参值,就不能再定义它。
5.如果几个函数说明出现在不同的作用域内,则允许分别为它们提供不同的默认形参值。
eg:
6.对形参默认值的指定可以是初始化表达式,甚至可以包含函数调用。
eg:int f(int a, float b=5.0, char c='c', int d=sub(20,15));
7. 在函数原型给出了形参的默认值时,形参名可以省略。
eg:int f(int, float=5.0, char='c', int=sub(20,15));
#include <iostream> using namespace std; int sub(int x=8,int y=3){ return x+y; } int main(){ //freopen("D:\\input.in","r",stdin); //freopen("D:\\output.out","w",stdout); cout<<sub(20,15)<<endl;//35 cout<<sub(10)<<endl;//13 cout<<sub()<<endl;//11 return 0; }
需要注意的地方:
1.若函数具有多个形参,则默认形参值必须自右向左连续地定义,并且在一个默认形参值的右边不能有未指定默认值的参数。这是由于c++语言在函数调用时参数是自右向左入栈这一约定决定的。
eg:int f(int a, float b=5.0, char c='c');
2.在调用一个函数时,如果省去了某个实参,则直到最右端的所有实参都得省去(当然,与其对应的形参要有默认值)。
eg:int f(int a, float b=5.0, char c='c', int d=10); f(9,4.5) <=> f(9,4.5,'c',10).
3.默认形参值的说明必须出现在函数调用之前。而且,如果存在函数原型,则形参的默认值应在函数原型中指定;否则在函数定义中指定。另外,若函数原型中已给出了形参的默认值,则在函数定义中不得重复指定,即使所指定的默认值完全相同也不行。
eg:
#include <iostream> using namespace std; int sub(int x=8,int y=3); int main(){ //freopen("D:\\input.in","r",stdin); //freopen("D:\\output.out","w",stdout); cout<<sub(20,15)<<endl;//35 cout<<sub(10)<<endl;//13 cout<<sub()<<endl;//11 return 0; } int sub(int x,int y){ return x+y; }
4.在同一个作用域,一旦定义了默认形参值,就不能再定义它。
5.如果几个函数说明出现在不同的作用域内,则允许分别为它们提供不同的默认形参值。
eg:
#include <iostream> using namespace std; int sub(int x=8,int y=3); int main(){ //freopen("D:\\input.in","r",stdin); //freopen("D:\\output.out","w",stdout); int sub(int x=0,int y=0); cout<<sub()<<endl; return 0; }
6.对形参默认值的指定可以是初始化表达式,甚至可以包含函数调用。
eg:int f(int a, float b=5.0, char c='c', int d=sub(20,15));
7. 在函数原型给出了形参的默认值时,形参名可以省略。
eg:int f(int, float=5.0, char='c', int=sub(20,15));
相关文章推荐
- 零基础学C语言 笔记三 三种方法交换两个变量的值
- c++引用返回值
- Effective C++ 条款10 令operator=返回一个reference to *this 条款11 在operator=中处理"自我赋值"
- C++打印杨辉三角形
- Effective C++ 条款9 决不在构造和析构过程后调用虚函数
- bcb 6.0工程平移C++ builder xe8环境
- C++基础知识
- 二叉树的前、中、后序遍历与重构问题
- 归并排序(C/C++)
- C++ 4 种具有更 为准确语义的新强制转换类型
- C Primer Plus 学习笔记
- c++ primer 复习-函数
- C++内存分配一:C++程序内存的基本组成
- C语言求素数的算法
- C++中将string类型转换为int, float, double类型 主要通过以下几种方式:
- C++ int类型转换string类型
- C++常见面试
- C++面试常见题目问与答(汇总一)
- POJ C++程序设计 编程题#4:魔兽世界之一:备战
- 图解C++