c++ - 返回 C++ 引用变量 VS 返回变量
问题描述
假设 C++ 中的以下函数:
#include <iostream>
int& change(int& a){
a = 6;
return a;
}
int main(){
int a = 5;
int b = change(a);
std::cout << b << std::endl;
return 0;
}
运行它将返回:
6
我的问题是,如果我将返回类型从int&
to更改int
,编译器不会抱怨,它仍然会打印 6。那么在 C++ 中重新调整引用是如何工作的?(将其与在 C 中返回一个指针进行比较)
解决方案
引用,就像指针一样,是通过存储对象的地址来实现的。
按值返回意味着它正在返回旧对象的副本。
按引用返回意味着它正在返回旧对象的地址。
#include <iostream>
int& change_ref(int& a) {
a = 6;
return a;
}
int change_value(int& a) {
a = 6;
return a;
}
int main() {
int a = 5;
change_ref(a) = 7;
// change_value(a) = 7; compile error
std::cout << a << std::endl;
int& a1 = change_ref(a); // return reference of a
// now a1 ref the a
a1 = 10;
// print a = 10 and a1 = 10
std::cout << a << " " << a1 << std::endl;
int a2 = change_value(a); // return a value of a, so return is 6
// value of a is 6 and define a new value a2
a2 = 11;
// set a2 to 11 and not change a
// print a = 6, a1=6, a2= 11
std::cout << a << " " << a1 << " " << a2 << std::endl;
return 0;
}
推荐阅读
- css - 将 alpha 通道添加到 css 变量上声明的十六进制颜色
- java - java.lang.NumberFormatException:带有 Integer.Parseint() 的 null
- javascript - 如何动态更改chartjs中的json数据
- reactjs - 移动到其他屏幕时反应导航调用整个堆栈
- mysql - 来自多表codeigniter的结果数据
- php - 在 Ajax/PHP/JQuery 中实现分页功能
- html - 检查时如何使元素从html DOM树中消失?
- maven - 为模式生成代码时出错,升级 jooq 3.11
- spring - 使用 Spring 在标题中显示用户信息
- element-ui - el-table 中的 el-table-column 数组是否有属性