通过引用函数传递值的目的是什么
what is the purpose of passing a value by reference to a function?
下面是一个例子:
"阵列列表.cpp"
.....
...
..
void Stack::putSurname(employee& e)
{
cout<<"Insert SURNAME"<< endl;
cin >> e.surname;
}
......
....
..
void Stack::push(employee e)
{
pos++;
employeeList[pos] = e;
}
......
....
..
"ArrayList.h"
.......
.....
..
struct employee
{
string name, surname;
int age;
};
class Stack
{
public:
employee employeeList[1000];
int pos =-1;
public:
bool isEmpty();
void push(employee e);
....
......
........
在函数 putSurname 中,为什么我必须通过引用传递变量 employee 才能看到 employeeList 数组中的更改?
通过引用传递变量的目的是每次调用函数时该变量在内存中的位置都会更改,因此每次都分配不同的存储变量?
让我们想象一下以下场景。
employee emp;
employee& e2 = emp;
然后,e2
成为emp
的引用变量。您可以使用e2
更改对象emp
。
考虑您的putSurname
方法
void Stack::putSurname(employee& e)
{
cout<<"Insert SURNAME"<< endl;
cin >> e.surname;
}
您必须按如下所示调用该函数。
employee emp;
putSurname(emp);
然后在你的方法putSurname
中,e
将充当emp
的引用变量,并且你对e
所做的任何更改都将反映到emp
。
如果你的方法如下。
void Stack::putSurname(employee e)
{
cout<<"Insert SURNAME"<< endl;
cin >> e.surname;
}
您仍然可以将该方法调用为
employee emp;
putSurname(emp);
但在此处,该函数将创建 emp
employee 对象的副本(按值传递)以执行其任务。然后你知道,因为它是一个副本,更改不会反映回emp
.并且该变量将在函数执行后从堆栈中删除。然后,您将丢失所做的任何更改。
希望这有帮助。
相关文章:
- 在C++17中,引用const字符串的语义应该是什么
- 引用文件的适当方法是什么?
- 引用 std::any 或 not_yet_in_std::whatever 的惯用方式是什么?
- 对于具有引用返回类型的搜索算法,默认返回值应该是什么?
- 通过引用函数传递指针参数是什么意思?
- C++ 中的引用范围是什么?
- 将引用绑定到指针的语法是什么?(各种)
- 对struct::struct的未定义引用是什么意思
- 使用对函数和IO对象的引用(作为参数)的目的是什么
- 将字段(在类中)定义为引用的缺点是什么?
- (.text+0x20):对"主要"的未定义引用是什么意思
- 将此类传递给引用的正确语法是什么?
- 引用 using 声明引入的功能的句子是什么意思?
- 使用 std::shared_ptr 接收变量作为引用的利弊是什么?
- std::forward() 的右值引用重载的目的是什么?
- 模板类中引用的引用的类型是什么
- 引用和指向常量的指针的用法是什么
- 包含通过引用捕获的 lambda 函数的"variable"的类型是什么?
- 使用 dlopen() 引用共享库插件的正确方法是什么?
- 数组是通过引用传递的,但是如果我只传递未存储在内存中的数组的值,会发生什么