int a
void fun(int a)
{
a++;
std::cout << "传入:" << a << std::endl;
}
int main()
{
int a = 10;
std::cout << "初始值:" << a << std::endl;
fun(a);
std::cout << "计算后:" << a << std::endl;
}
初始值:10
传入:11
计算后:10
这样的函数调用时是不会改变参数的值的,在函数中也就是以一个局部变量的形式存在,当函数结束时,变量a的生命周期也就结束了。
int &a
void fun(int &a)
{
a++;
std::cout << "传入:" << a << std::endl;
}
int main()
{
int a = 10;
std::cout << "初始值:" << a << std::endl;
fun(a);
std::cout << "计算后:" << a << std::endl;
}
初始值:10
传入:11
计算后:11
可以发现传入引用时候,会修改原实参的值。
const int &a
参数是较大的数据结构类型时,而且我们不需要改变原变量中的值。就需要在最前面加一个const修饰符。这时候有小伙伴会问,这样为啥还不如直接用int a形式。理论上用int a是完全可行的。但是由于考虑效率问题,对原变量进行一次复制操作,即使两个变量名是相同的由于作用域不同,所以其实是两个变量,所以需要一次复制操作,因此当数据大小较大时是非常浪费时间的。所以直接传入引用。
void fun(const int &a)
{
//a++; //如果放开,此行会报错。因为a不能赋值,不能被概念
std::cout << "传入:" << a << std::endl;
}
int main()
{
int a = 10;
std::cout << "初始值:" << a << std::endl;
fun(a);
std::cout << "计算后:" << a << std::endl;
}
初始值:10
传入:10
计算后:10
网友评论