C++ 通过值结果?

C++ 通过值结果?,c++,C++,可能的重复项: 我很难理解传递值结果方法。我理解按引用传递和按值传递,但我不太清楚按值传递的结果。按值传递有多相似(假设相似) 这是密码 #include <iostream> #include <string.h> using namespace std; void swap(int a, int b) { int temp; temp = a; a = b; b = temp; } int main() { int value

可能的重复项:

我很难理解传递值结果方法。我理解按引用传递和按值传递,但我不太清楚按值传递的结果。按值传递有多相似(假设相似)

这是密码

#include <iostream>
#include <string.h>
using namespace std;

void swap(int a, int b)
{

  int temp;
    temp = a;
    a = b;
    b = temp;
}

int main()
{
  int value = 2;
  int  list[5] = {1, 3, 5, 7, 9};


  swap(value, list[0]);

  cout << value << "   " << list[0] << endl;

  swap(list[0], list[1]);

  cout << list[0] << "   " << list[1] << endl;

  swap(value, list[value]);

  cout << value << "   " << list[value] << endl;

}
#包括
#包括
使用名称空间std;
无效掉期(整数a、整数b)
{
内部温度;
温度=a;
a=b;
b=温度;
}
int main()
{
int值=2;
int list[5]={1,3,5,7,9};
交换(值,列表[0]);

cout如果通过值传递,则在方法中复制变量。这意味着对该变量所做的任何更改都不会发生在原始变量上。这意味着您的输出如下所示:

2   1
1   3
2   5
如果您是通过引用传递的,即传递变量的地址(而不是复制),那么您的输出将不同,并且将反映在swap(int a,int b)中进行的计算。您运行此操作是为了检查结果吗

编辑 在做了一些研究之后,我发现了一些东西。C++不支持传递值结果,但是它可以被模拟。这样做,你就创建了变量的副本,通过引用你的函数传递它们,然后将原始值设置为临时值。
#include <iostream>
#include <string.h>
using namespace std;

void swap(int &a, int &b)
{

  int temp;
    temp = a;
    a = b;
    b = temp;
}

int main()
{
  int value = 2;
  int  list[5] = {1, 3, 5, 7, 9};


  int temp1 = value;
  int temp2 = list[0]

  swap(temp1, temp2);

  value = temp1;
  list[0] = temp2;

  cout << value << "   " << list[0] << endl;

  temp1 = list[0];
  temp2 = list[1];

  swap(list[0], list[1]);

  list[0] = temp1;
  list[1] = temp2;

  cout << list[0] << "   " << list[1] << endl;

  temp1 = value;
  temp2 = list[value];

  swap(value, list[value]);

  value = temp1;
  list[value] = temp2;
  cout << value << "   " << list[value] << endl;

}

这种类型的传递也称为Copy-In,Copy-Out。Fortran使用它。但这就是我在搜索过程中发现的所有内容。希望这能有所帮助。

使用引用作为参数,例如:

void swap(int &a, int &b)
{

  int temp;
    temp = a;
    a = b;
    b = temp;
}

a和b现在将保留实际值。

查看您的代码,对
swap()
的调用没有任何外部影响。它们的参数是按值传递的。我认为在这种情况下,“按值传递结果”是“如果
swap()
使用按值传递结果如何?”的糟糕版本。我可能会这么想“按值传递结果”表示“按值传递的函数结果”(即不返回引用或指针),但这在这里没有意义,因为
swap()
不返回任何内容。@Mike好的,有时按值传递结果指的是按副本传递。如果这有助于直到看不到它和按值传递之间的区别。我假设“子程序”在这里只是“函数”的另一个词。“…然后在子程序终止时复制回来。"等等,什么?C++有一个机制来做这个操作?我知道在函数终止时明确复制的唯一的东西是返回值,优化器被允许去删除那个拷贝。@威利:通过值结果不是一回事。在C++中有3种方法传递对象。很抱歉,这让人困惑,但我已经运行了这些结果,并得到了这些关于传递值的答案。但我所说的是传递值结果,它不同于传递值。谢谢,伙计,我真的很感谢你的帮助。如果是复制入,复制出,你不应该将值复制到临时变量,调用交换,然后重新设置吗是否在交换调用后调整目标值?第一次调用看起来正确,但如果我理解正确,您希望每次都传入
temp1
temp2
进行交换。
void swap(int &a, int &b)
{

  int temp;
    temp = a;
    a = b;
    b = temp;
}