c++ - 按值传递参数和按引用传递参数有什么区别?

标签 c++ c pass-by-reference pass-by-value

Possible Duplicate:
What's the difference between passing by reference vs. passing by value?

我读到,在 C 中参数是按值传递的,但是按值传递参数(如 C 中)或按引用传递参数(如 C++ - C#)之间有什么区别? 指针和引用有什么区别?

void with_ptr(int *i)
{ *i = 0; }

void with_ref(int &i)
{ i = 0; }

在这些情况下都修改两个值吗?如果是,为什么 C++ 允许通过引用传递参数?我认为函数内部并不清楚 i 值可以修改。

最佳答案

what's is the difference between passing arguments by value or by reference

如果按值传递,则对变量的更改将是函数本地的,因为调用函数时会复制该值。对引用参数的修改将传播到原始值。

What's the difference between a pointer and a reference?

正如您在代码中所看到的,差异主要在于语法。此外,指针可以被重新分配以指向其他内容(除非它被声明为const),而引用则不能;相反,分配给引用将分配给引用的

I think it is not clear inside the function that the i value could be modified.

相反,这是绝对清楚的:函数签名告诉你这一点。

实际上有一种情况是函数外部并不清楚。这就是为什么 C# 的原始版本要求您使用 ref 显式注释任何按引用调用(即 f(ref x) 而不是普通的 f(x ))。这类似于使用 f(&x) 在 C++ 中调用函数来明确传递了一个指针。

但在 C# 的最新版本中,使用 ref 进行调用是可选的,因为它毕竟没有带来足够的优势。

关于c++ - 按值传递参数和按引用传递参数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10598043/

相关文章:

javascript - 如何通过引用传递变量?

c++ - 如何在 VS 2010 中生成均匀分布的随机数?

c++ - 比较 vector 中 vector 的大小以获得最大的

c++ - 如何输出分数而不是小数?

java - 无法使用 "Install New Software"在使用 ubuntu 14.04 的 eclipse 上添加 cdt

c++ - C/C++ 一次读取一行

c++ - 通过引用问题 C++

c++ - 分析 OpenMP 并行化 C++ 代码

c - USB 设备注册 - 仅在停止请求时记录

c++ - 对指针和常量兼容性的引用