返回一个C++引用变量 VS 返回一个变量
Returning a C++ reference variable VS returning a variable
假设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&
更改为 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;
}
只要它不是本地声明的变量,您就可以通过引用返回(因为它们将从堆栈中删除(。通过引用返回仅意味着它不是返回对象的副本,而是返回实际对象。
您正在通过引用调用函数change()
,然后将 a
的实际值更新为 6。由于 a
的值更新为 6,因此无论返回类型如何,a
都将携带更新的值,并始终在给定的示例中打印6
。
注意:b
的声明数据是int
的,因此您不会打印任何参考。
相关文章:
- 用C++中的一个变量定义一个常量
- 一个变量的输入值也会保存到另一个变量中
- 将双精度变量设置为另一个变量的值
- 对具有相同方法的不同类使用一个变量
- 为什么一个变量获得与另一个值相同的值
- 尝试在 C++ 中为 ifstream 提供一个变量
- 类中的一个变量显示,但另一个不显示
- 声明一个变量,该变量在 c++ 或 c 中具有值,当程序终止时不会被销毁
- c++问题:给一个变量赋值后,另一个变量发生了变化
- 如何将一个变量用于父类和派生类
- 如何在循环中使用scanf,将值存储到一个变量中,然后打印出来?
- 我如何将一个变量与另一个变量进行比较,例如我想如果(var1 > var2 x 1),然后执行此 c++
- 如何在一个函数中定义一个变量,并在另一个函数中访问和更改它?(C++)
- 如果一个变量在它之前释放了另一个(相同的数据类型)变量,如何将其分配给内存?
- 迭代器或反向器的一个变量
- fstream库,试图创建一个变量名为(c++)的文件
- 如何在 c++ 中将两个不同类型的变量分配给一个变量
- 如何将一些变量放在一个变量中?
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
- 如何用索引命名一个变量来存储输入 mxArray?