在C++中能够在函数的形参表中赋值吗?
const int defaultSize = 100;
...
SeqList(int sz = defaultSize);
...
能够直接这样在形参表里边赋值吗?效果是什么?是在调用函数的时候直接将这个位置的形参替换成所赋的值吗? 展开
2015-10-26 · 知道合伙人金融证券行家
可以
在函数声明或定义时,直接对参数赋值,该参数就是默认参数。在函数调用时,省略部分或全部参数,这时就会使用默认参数进行代替。
使用方法:
(1)在函数声明或定义时,直接对参数赋值,该参数就是默认参数。
(2)在函数调用时,省略部分或全部参数,这时就会使用默认参数进行代替。
注意事项:
(1)一般在声明函数是设置默认参数。
如果在函数声明和定义函数时都设置了默认参数,则以函数声明的默认参数为准。
复制代码 代码如下:
#include<iostream>
using namespace std;
int main()
{
double add(double a=3.2,double b=9.6);//在函数声明时设置默认参数
cout<<add()<<endl; //使用默认参数
return 0;
}
double add(double a=3.2,double b=9.5)//在定义函数时设置默认参数
{
return a+b;
}
运行结果:
(2)默认参数的定义顺序是自右向左。
即如果设置了一个缺省值,其右边的参数也应该设定一个缺省值。
即:
复制代码 代码如下:
<pre name="code" class="cpp">int add(int a,int b=1,int c=1);</pre>
(3)默认参数的调用顺序是自左向右。
在使用函数的时候,实参必须是由左自右书写的。
复制代码 代码如下:
/*正确的用法*/
add(1,2,3);//传递三个参数的值
add(1,2);//传递两个参数的值
add(1);//传递一个参数的值
add();//不传递参数的值
/*错误的用法*/
add(,2,3);//不能省略掉左边的参数的值,应该右左向右传值
2013-01-23
int fun(int a,int b = 5)
{
....
}
那么调用的时候可以写成 fun(2),这时就等价于fun(2,5);
如果你调用时写成fun(2,7);此时形参b就是7,如果不写就会使用你的默认值。
要注意,默认值只能是靠右边的形参,可以有多个形参都提供默认值,但是他们必须都在右边,并且是常量。
如:
int fun(int a = 2,int b);这样就是错的,因为默认形参没有放在右边
我不太理解你说的“必须是常量”
比如说我在调用上面的函数的时候写成
SeqList(a[3])
其中a[3]本身不是const,但是已经赋过值,这样可以吗?
我看错了,以为你说的是3,如果只是个赋过值数组,那就不行了