将引用参数传递给值参数

passing reference argument to value argument

本文关键字:值参 参数 参数传递 引用      更新时间:2023-10-16

忽略以下C++代码中可能完成的任何编译器优化,是

void f(int n) {
    n += 1;
}
void g(int &n) {
    f(n);
}

相当于

void f(int n) {
    n += 1;
}
void g(int *n) {
    f(*n);
}

那么在使用引用参数时,仍然可以在不那么明确可见的地方制作值副本?

编辑我问的是是否可以使用参考参数制作实际值副本。当像第二种情况一样使用指针时,我显式取消引用指针以按值传递,但是使用引用参数有时会隐式取消引用吗?是我的问题。

我问的是是否可以使用参考参数制作实际值副本。

绝对。它是参考的事实无关紧要。您可以像对待它引用的对象一样对待它。

当像第二种情况一样使用指针时,我显式取消引用指针以按值传递,但是使用引用参数有时会隐式取消引用吗?

您将引用视为某种隐藏指针。术语在这里并没有真正的帮助。"取消引用"是你对指针而不是引用执行的操作。事实上,该标准已更改为使用"执行间接"而不是"取消引用"来帮助澄清这一点。关键是,引用没有被取消引用,因为这不是发生的事情 - 你只是在复制被引用的对象。