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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)