c++ - 参数传递机制?

标签 c++ parameter-passing

“按值-结果传递”、“按引用传递”和“按名称传递”有什么区别?

我有一个 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/

相关文章:

c++ - 错误 C2248 : 'sf::NonCopyable::NonCopyable'

java - 如何转发参数列表

c++ - 使用 Clang (3.8) 和 Android NDK r14b 构建 Boost (1.58)

c++ - 我可以在初始化数组时避免 c++11 移动吗?

java - 如何将变量从 Main Activity 传递到 AsyncTask 及其方法?

javascript - 传递并返回来自 javascript 和 android 的值,并用作手机间隙插件

c - 良好做法:非变异函数何时应要求使用指针而不是副本?

R:获取在 `...`中传递的参数名称

c++ - 按成员元素从 vector 中删除元素

c++ - CUDA:处理不同大小的数组