如果参数传递两次,会发生什么?一次通过价值和一次参考?它会被修改吗?

M.I*_*oan 4 c++

#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("BAC.TXT");
void eval(int a, int b, int &rez)
{
    rez = a + b;
}
int main()
{
    int nr;
    int s;
    fin >> s;
    while (fin >> nr)
        eval(s, nr, s);
    cout << s << '\n';
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以我有这段代码片段.我正在从文件中读取数字并使用名为"eval"的给定函数跟踪它们的总和.我知道将参数传递两次(在这样的给定实例中)而不是使用另一个变量(不确定,但是,如果它是坏代码,在我的情况下)可能被认为是错误的代码.我的问题是:它会改变变量的值s吗?再次,我通过价值和一次参考传递一次!我已经在我的电脑上编写了代码,它确实改变了它的价值s.现在我的问题是:为什么?如果我以正确的方式提出这个问题:"在后台"会发生什么?

for*_*818 6

事实a是副本s实际上是一个红鲱鱼.也许这会引起你的困惑,但它只是一个副本.考虑一下你可以像这样调用这个函数

auto temp = s;
eval(temp,nr,s);
Run Code Online (Sandbox Code Playgroud)

得到完全相同的结果.函数内部rez是一个引用s,因此对它的修改将反映s在其中main.换句话说,rez是一个别名s,虽然a没有任何关系s,但它们碰巧拥有相同的值.