“按值-结果传递”、“按引用传递”和“按名称传递”有什么区别?
我有一个 C++ 程序:
#include <stdio.h>
#include <iostream>
using namespace std;
void swap(int a, int b) {
int temp;
temp = a;
a = b;
b = temp;
}
int main() {
int value = 2, list[5] = {1, 3, 5, 7, 9};
swap(value, list[0]);
swap(list[0], list[1]);
swap(value, list[value]);
return 0;
}
这是调用交换后的解决方案:http://imgur.com/1HkCAnm 我不知道它们之间的区别。请帮我解释一下。
最佳答案
C++ 使用 call by value默认情况下,可以使用 call by reference如果参数被正确装饰。 (指针参数传递指针的值。)
如果您在下面更新的示例中指定了一个引用参数 (int& a
),您的交换函数将起作用。
Call by value-result C++ 不支持;它的工作原理是在函数开始时传入值,并在函数结束时将值复制出来。
Call by name只是很奇怪。它不是传递值,而是传递评估变量(在调用范围内)的代码位(又名 thunk)。数组引用因未按预期使用按名称调用进行评估而臭名昭著。
void swap(int& a, int& b) {
int temp;
temp = a;
a = b;
b = temp;
}
关于c++ - 参数传递机制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20689832/