void Func(int a = 0)
{
cout << a << endl;
}
int main()
{
Func(); // 没有传参时,使用参数的默认值
Func(10); // 传参时,使用指定的实参
return 0;
}
2.缺省参数分类
(1) 全缺省参数
cpp复制代码
void Func(int a = 10, int b = 20, int c = 30)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
(2)半缺省参数
cpp复制代码
void Func(int a, int b = 10, int c = 20)
{
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
}
int main()
{
Func(1);
return 0;
}
void TestRef()
{
int a = 10;
int& ra = a;//<====定义引用类型
printf("%p\n", &a);
printf("%p\n", &ra);
}
int main()
{
TestRef();
return 0;
}
注意:引用类型必须和引用实体是同种类型的。
3.引用的特性
(1)引用在定义时必须初始化
cpp复制代码
void TestRef1()
{
int a = 10;
// int& ra; 该条语句编译时会出错
int& ra = a;
}
(2)引用时不能改变指向
cpp复制代码
void TestRef2()
{
int a = 10;
int& ra = a;
int b = 2;
ra = b;//产生歧义
}
ra=b这条语句,不是改变了让指向,而是赋值。
(3)一个变量可以有多个引用
cpp复制代码
void TestRef2()
{
int a = 10;
int& ra = a;
int& rra = ra;
printf("%p %p %p\n", &a, &ra, &rra);
}
4.引用的使用场景
(1)做参数
①输出型参数
cpp复制代码
void Swap(int& left, int& right)
{
int temp = left;
left = right;
right = temp;
}
int main()
{
int a = 1;
int b = 2;
Swap(a, b);
cout << "a==" << a << endl;
cout << "b==" << b << endl;
return 0;
}
②对象比较大,减少拷贝,提高效率
cpp复制代码
struct A { int a[10000]; };
void TestFunc1(A a) {}
void TestFunc2(A& a) {}
void TestRefAndValue()
{
A a;
// 以值作为函数参数
size_t begin1 = clock();
for (size_t i = 0; i < 10000; ++i)
TestFunc1(a);
size_t end1 = clock();
// 以引用作为函数参数
size_t begin2 = clock();
for (size_t i = 0; i < 10000; ++i)
TestFunc2(a);
size_t end2 = clock();
// 分别计算两个函数运行结束后的时间
cout << "TestFunc1(A)-time:" << end1 - begin1 << endl;
cout << "TestFunc2(A&)-time:" << end2 - begin2 << endl;
}
int main()
{
TestRefAndValue();
return 0;
}
(2)做返回值
①正常情况
cpp复制代码
int func()
{
int a = 0;
return a;
}
int main()
{
int ret = func();
cout << ret << endl;
return 0;
}