More Effective C++条款1指针与引用

条款1主要讲解指针引用的使用时机:

结论是:当你知道你需要指向某个东西,而且绝对不会改变指向其他东西,或者当你实现一个操作符儿语法需求无法由pointer实现,应该选择reference,其他任何时候都应该选择pointer。

引用:给变量起别名。

语法:数据类型&别名 = 原名

int main() {
int a = 10;
int &b = a;       //此处引用之后,a,b均指向同一个内存地址    之后b不可以更改指向,引用的底层原理就是一个指针常量       int * const b =  &a;      指针常量是指针指向不可以修改,但是数值可以修改,这也解释为什么引用不可以更改指向
cout << "b = " << b << endl;   //10
b = 100;      //等同于 *b = 100
cout << "a = " << a << endl;   //100
cout << "b = " << b << endl;   //100\
int c = 200;
b = c;    //这是赋值操作,不是更改引用   ,经过这条语句之后  b = 200,a = 200
system("pause");
return 0;
}

引用使用的注意事项:引用使用之前必须初始化,初始化之后不可以更改。   错误用法:int &b;  没有初始化。
引用做函数返回值:

#include<iostream>
using namespace std;
//引用做函数返回值时注意事项:
//1/不要返回局部变量引用
//返回局部变量引用  (不允许)
int& test01() {
    int a = 10;
    return a;
}
//返回静态变量引用(允许)
int& test02() {
    static int a = 10;
    return a;
}
int main() {
    错误用法1    不要返回局部变量引用
    //int& b = test01();
    //cout << b << endl;  //10
    //cout << b << endl;  //乱码
    //cout << b << endl;  //乱码
    //允许返回静态变量引用
    int& b = test02();
    cout << b << endl;
    //如果函数做左值(在等式左边),必须返回引用。
    int& b = test02();
    cout << b << endl; //10
    cout << b << endl; //10
    cout << b << endl; //10
    test02() = 1000;
    cout << b << endl; //1000
    cout << b << endl; //1000
    cout << b << endl; //1000
    system("pause");
    return 0;
}

常量引用:

//引用使用的场景,通常用来修饰形参
void showValue(const int& v) {
    //v += 10;    //不允许修改  常量引用 
    cout << v << endl;
} 
int main() {

//int& ref = 10; 引用本身需要一个合法的内存空间,因此这行错误

//加入const就可以了,编译器优化代码,int temp = 10; const int& ref = temp;
    const int& ref = 10;
//ref = 100; //加入const后不可以修改变量
    cout << ref << endl;
//函数中利用常量引用防止误操作修改实参
    int a = 10;
    showValue(a);
    system("pause");
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页
评论

打赏作者

qq_39036772

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值