C++ 引用变量

一,引用变量

C++新增了一种复合类型--引用变量。引用是已定义变量的别名,使用引用变量的主要的用途是作为函数的参数。通过将引用变量用作参数,通过形参就可以对原始的数据进行修改。这样除指针之外,引用也为函数处理class与struct提供了一种非常方便的途径。


二,声明引用变量

C与C++使用&来获取变量的地址。C++给&赋予了另外一个含义,将其用来声明引用。

int num = 20;
int &re = num;

注意:必须在声明引用变量时进行初始化。下面的做法将导致编译错误:

int num = 20;
int &re;
re = num;


三,将引用用作函数的参数

引用常被用作函数的参数,使得函数中的变量名成为调用程序中的变量的别名,这种传递参数的方法称为按引用传递,按引用传递允许被调用的函数能够访问调用函数中的变量。C++新增的这种特性也是对C语言的超越,C语言只能按值传递,按值传递导致被调用函数使用调用函数的值的拷贝。

#include <iostream>
using namespace std;

void Swap(int &x, int &y){
    int temp = x;
    x = y;
    y = temp;
}

int main(){
    int a = 5, b = 10;
    Swap(a, b);
    cout<<"a: "<<a<<endl;
    cout<<"b: "<<b<<endl;
    return 0;
}


四,将引用用于类对象

引用非常适合用于结构与类,C++中引入引用的主要目的是为了这些类型的,而不是基本的内置类型。将类对象传递给函数时,C++的通常的做法是使用引用。下面是我们自定义的类

class Person{
private:
    string name;
    int age;
public:
    Person();
    Person(const string &name, int age);
    Person(const Person &obj);
    Person & operator=(const Person &obj);
};

Person::Person(){
    name = "default";
    age = 0;
}

Person::Person(const string &name, int age){
     this->name = name;
     this->age = age;
}

Person::Person(const Person &obj){
    name = obj.name;
    age = obj.age;
    cout<<"拷贝构造函数"<<endl;
}

Person & Person::operator=(const Person &obj){
    if(this == &obj){
        return *this;
    }
    name = obj.name;
    age = obj.age;
    cout<<"赋值构造函数"<<endl;
    return *this;
}

1,使用引用作为函数的参数,比直接传递对象,节省时间和内存

定义两个函数,函数的功能是输出对象的内容,一个传递引用,另一个直接传递对象

void displayByReference(Person &obj){
}

void displayByObject(Person obj){
}
输出结果

拷贝构造函数
Process return 0;

调用displayByObject函数直接传递对象,会使用Person类的拷贝构造函数获取实参对象的副本,形参对象的生命周期结束时,还会调用它的析构函数。


2,将引用作为函数的参数返回

传统的返回机制与按值传递函数参数类似:计算关键字return后面的表达式,并将结果返回给调用函数。从概念上说,这个值被复制到一个临时的位置,而调用程序将使用这个值。例如:

Person P = getObject();

如果getObject函数返回一个类对象,将把整个对象复制到一个临时的位置,再将这个拷贝复制给P。但如果函数的返回值为引用,将直接把引用复制到P,后者效率更高。

注意:返回引用时,应避免返回局部对象的引用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值