cpp学习笔记(引用)

一、引用作函数返回值 

  1. 不要返回非静态局部变量的引用
  2. 函数返回的引用可以作为左值

对一个普通的、直接返回值的函数

int Square(int a ){            // 返回值
    //int temp = a*a;
    return a*a;
}

 而返回引用是错误的,因为a是非静态局部变量,不能返回一个随时被销毁的局部变量的引用

int & Square(int a ){     //此处不能直接返回a的引用,因为a是局部变量,随时被销毁
    //int temp = a*a;     //但可以返回全局变量或静态变量
    return a*a;           //返回一个变量的引用相当于返回该变量本身,不会在内存中产生副本
}

但可以返回静态变量、全局变量。注意以下令 b = a,返回 b*b 是错误的,因为 b*b 也是局部变量

int & Square2(int a ){
    static int b = a*a;    //静态局部变量,保存在全局区,整个程序运行期间都不释放,保存上一次调用
    return b;              //时的值,即只赋初值一次;只能被该函数访问,在其他函数中不可见
}

int sqar = Square2(5);    //sqar是b的引用

 不能用值返回 直接作为 引用的初始化值,例如以下

int Square(int a){            // 值返回
    return a;

int &s = Square(5);

但可以用返回的引用 作为 新一个引用的初始化值(当然,需要返回的是一个静态变量或全局变量),如以下

int b;        //全局变量
int & Square2(int a ){
    b = a*a;
    return b;
}

int & sqar2 = Square2(6);
cout << sqar2 << endl;

函数的引用可以作为左值,相当于对

int b;
int & Square2(int a){    //此处返回的是b的引用,相当于b本身,故相当于对b赋值
    b = a*a;
    return b;            //如果是值返回,则不能作为左值
}
int main() {
    Square2(6) = 5;
    cout << b <<endl;
}

二、引用作函数形参

此时形参也会修饰实参,类似指针

void Swap(int &a,int &b){
    int temp = a; a = b; b = temp;
}

三、常量引用

本质是一个引用,加const防止被改,例如防止形参被改。引用只能引用在堆区或栈区的,不能是常量,如下会报错

int add(const int &a){
    a++;
    return a;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值