【C++学习记录】为什么函数参数一般使用引用

原因

C++中函数形参一般使用引用的原因有以下几个:

1、避免不必要的复制:如果传递一个大对象时,如果按值传递,就会进行复制,浪费时间和空间。使用引用传递则可以避免这种情况,因为只需要传递地址,不需要进行复制。
2、直接修改实参:如果要修改实参,使用引用传递会比使用指针更加方便和直接。
3、函数返回值可以是对象本身:当函数返回对象时,使用引用传递可以将对象本身作为返回值返回,而不是进行复制。
4、可以与 const 一起使用:使用引用传递时,可以将引用声明为 const,以确保函数不会修改引用指向的对象。

总之,使用引用传递可以提高程序的效率,减少内存的开销,并且使代码更加简洁和易于理解。

通过代码加深理解

不使用引用的函数形参代码例子:

#include <iostream>

void addOne(int num) {
    num++;
}

int main() {
    int a = 5;
    addOne(a);
    std::cout << "a: " << a << std::endl; // 输出 a: 5
    return 0;
}

使用引用的函数形参代码例子:

#include <iostream>

void addOne(int& num) {
    num++;
}

int main() {
    int a = 5;
    addOne(a);
    std::cout << "a: " << a << std::endl; // 输出 a: 6
    return 0;
}

在不使用引用的函数形参代码例子中,函数 addOne() 接受的是 int 类型的参数,函数内部对参数进行加一操作,但是参数 num 是通过值传递进来的,因此函数内部对 num 的操作不会影响到实参 a。

而在使用引用的函数形参代码例子中,函数 addOne() 接受的是 int& 类型的参数,即对参数进行引用传递。函数内部对参数的操作会直接影响到实参 a,因为参数 num 引用了实参 a 的内存地址,相当于直接操作了 a 的值。因此,在使用引用的函数形参中,我们可以直接修改实参的值,避免了不必要的数据拷贝,提高了程序的效率。

相关知识点:一般引用和常引用

在C++中,引用是一个别名,它允许我们用另一个名称来引用已经存在的变量。引用一般分为一般引用和常引用两种类型。

一般引用:没有被 const 修饰的引用被称为一般引用,可以修改被引用的对象。

常引用:被 const 修饰的引用被称为常引用,不能修改被引用的对象,从而起到保护被引用对象的作用。

如果希望实参随形参改变,用一般引用;如果不希望实参随形参改变,用常引用。

下面是一般引用和常引用的定义和使用示例:

#include <iostream>
using namespace std;

int main() {
  int num1 = 10;
  int num2 = 20;

  // 一般引用
  int &ref1 = num1;
  ref1 = num2; // 修改 ref1 的值会影响 num1 的值

  // 常引用
  const int &ref2 = num1;
  // ref2 = num2; // 编译错误,不能修改 ref2 的值

  cout << "num1 = " << num1 << endl;
  cout << "num2 = " << num2 << endl;
  cout << "ref1 = " << ref1 << endl;
  cout << "ref2 = " << ref2 << endl;

  return 0;
}

输出结果为:

num1 = 20
num2 = 20
ref1 = 20
ref2 = 20

从上面的例子可以看出,一般引用可以修改被引用的对象的值,而常引用不能修改被引用对象的值。常引用主要用于函数的形参,可以避免在函数中修改实参的值。

下面是一个示例代码,展示如何使用常引用来避免在函数中修改实参的值:

#include <iostream>

void function(const int& x) {
    // x = 5; // error: assignment of read-only reference 'x'
    std::cout << "The value of x is " << x << std::endl;
}

int main() {
    int a = 10;
    function(a); // pass by reference
    return 0;
}

在这个示例中,函数 function 的参数类型为 const int&,即常引用,这保证了函数内部不能修改实参 a 的值。如果在函数内部试图修改 x 的值,编译器会报错。

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值