值参数和参考参数之间的差异?

Nav*_*eed 5 oop parameters reference

值参数和参考参数之间的差异?在我的采访中,访谈员有时会问这个问题.有人可以告诉我一个容易用例子解释的确切区别吗?并且参考参数和指针参数是一样的吗?

谢谢

小智 14

调用者看不到对值参数的更改(也称为"按值传递").

调用者可以看到对参考参数的更改("按引用传递").

C++示例:

void by_value(int n) { n = 42; }
void by_ref(int& n) { n = 42; }

void also_value(int const& n); // Even though a reference is used, this is
// semantically a value parameter---though there are implementation
// artifacts, like not being able to write "n = 42" (it's const) and object
// identity (&n here has different ramifications than for by_value above).
Run Code Online (Sandbox Code Playgroud)

指针的一个用途是实现"引用"参数,而不使用特殊的引用概念,某些语言(如C)没有.(当然,您也可以将指针视为值本身.)


sha*_*oth 8

主要区别在于是否复制了传递的对象.如果它是一个值参数,编译器必须生成这样的代码,改变函数内部的函数参数对传递的原始对象没有影响,因此它通常会复制该对象.在参考参数的情况下,编译器必须生成这样的代码,所有操作都在传递的原始对象上完成.