为什么call-by-value示例不修改输入参数?

use*_*486 2 c++ call

在下面的按值调用示例中,我无法理解为什么此代码不会将5的值更改为6.

第11行调用函数changeValue,其值为6,所以我认为应该输出6,但仍然输出5?

#include <iostream>
using namespace std;

void changeValue(int value);

int main()
{
  int value = 5;
  changeValue(value);

  cout << "The value is : " << value << "." << endl;

  return 0;
}

void changeValue(int value)
{
  value = 6;
}

// This doesn't change the value from 5 to 6. 5 is output?
Run Code Online (Sandbox Code Playgroud)

Alo*_*ave 9

当您按值传递函数参数时,对象的副本将传递给函数而不是原始对象.除非您明确指定函数的参数,否则始终通过C/C++中的值传递.

你的功能:

void changeValue(int value)
Run Code Online (Sandbox Code Playgroud)

通过值接收参数,简而言之value,main()创建一个in的副本并传递给函数,该函数对该值进行操作而不是valuein main().

如果要修改原件,则需要使用pass by reference.

void changeValue(int &value)
Run Code Online (Sandbox Code Playgroud)

现在,原始的引用(别名)value被传递给函数,函数对它进行操作,从而反映出的变化main().