C++Note 引用下

引用作函数的返回值

1.不要返回局部变量的引用

2.函数的调用可以作为左值

复制代码
 1 #include <iostream>
 2 using namespace std;
 3 
 4 //引用做函数的返回值
 5 //1.不要返回局部变量的引用
 6 int& test01()
 7 {
 8     int a = 10;//局部变量在栈区  函数执行完毕释放
 9     return a;
10 }
11 //2.函数的调用可以作为左值
12 int& test02()
13 {
14     static int a = 10;//静态变量 存放在全局区域 全局区上的数据在程序结束后系统释放
15     return a;//返回a的引用
16 }
17 
18 int main() 
19 {
20     //int& ref = test01();//对test01()中局部变量a进行返回 并引用别名ref指向a 错误
21     //cout << "ref = " << ref << endl;//第一次输出 可能正常 可能乱码 看编译器是否保护数据 
22     //cout << "ref = " << ref << endl;//乱码 test01()栈中a的内存已经释放
23     int& ref2 = test02();
24     cout << "ref2 = " << ref2 << endl;//10
25     cout << "ref2 = " << ref2 << endl;//10
26     test02() = 1000;// 相当于  a = 1000;
27     //如果函数的返回值是引用, 函数的调用可以作为左值  
28     cout << "ref2 = " << ref2 << endl;//1000   ref2 a的别名 同样变为1000
29     cout << "ref2 = " << ref2 << endl;//1000
30     system("pause");
31     return 0;
32 }
复制代码

引用的本质:

 引用的本质在C++内部实现是一个指针常量  

复制代码
 1 #include <iostream>
 2 using namespace std;
 3 //发现是引用 转换为 int* const ref = &a;
 4 void func(int& ref)
 5 {
 6     ref = 100; //ref是引用 转换为 *ref = 100
 7 }
 8 
 9 int main() 
10 {
11     int a = 10;
12     int& ref = a;
13     //自动转换为 int* const ref = &a;
14     //指针常量是指针指向不可修改 也表明为什么引用不可修改
15 
16     ref = 20;//内部发现ref是引用 自动帮我们转换为: *ref = 20;
17     cout << "a: " << a << endl;//20
18     cout << "ref: " << ref << endl;//20
19     func(a);//传入func()中 执行 int* const ref = &a
20     system("pause");
21     return 0;
22 }
复制代码

常量引用:

作用:常量引用主要用来修饰形参 防止误操作

在函数形参列表中 可以加const修饰形参 防止形参改变实参

复制代码
 1 #include <iostream>
 2 using namespace std;
 3 //打印数据函数
 4 void showValue(int& val)//引用的方式
 5 {
 6     val = 1000;//函数内改变变量数值   因为是引用 所以会改变主函数中的数值
 7     cout << "val = " << val << endl;
 8 }
 9 void showValue01(const int& val)//加入const  引用不可以被修改 保护主函数中变量数值
10 {
11     //val = 1000;//报错
12     cout << "val = " << val << endl;
13 }
14 
15 int main() 
16 {
17     // 常量引用
18     // 使用场景 用来修饰形参 防止误操作
19     //int& b = 10;//报错:引用必须引用一块合法的内存空间
20     const int& ref = 10;//正确 会临时生成 整型变量且值为10的临时变量
21     //加上const之后 编译器将代码改为 int temp = 10; int& ref = temp;
22     //但是 ref = 20; 报错  表达式必须是可修改的左值 临时变量没有合法空间 (ref只读)
23     int a = 100;
24    //showValue(a);//未加const a =  1000;   showValue中val 变为1000
25     showValue01(a);//a = 100; 加入const  不可以修改
26     system("pause");
27     return 0;
28 }
复制代码

 

posted on   廿陆  阅读(4)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示