【发布时间】:2015-01-11 14:28:40
【问题描述】:
忽略可能在以下 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);
}
?
所以在使用引用参数时仍然可以在不那么明确可见的地方制作值副本?
编辑 我在问是否可以使用参考参数制作实际值副本。在第二种情况下使用指针时,我显式地取消引用指针以按值传递,但是使用引用参数有时会隐式地取消引用吗?是我的问题。
【问题讨论】:
-
不等价:你不能在版本之间以同样的方式调用
g。 -
以什么方式等效?
g在每个接口中都有不同的接口(例如,我可以将nullptr传递给第二个接口(并打破它)) -
回答您的编辑,是的,将复制
n引用的整数并按值传递给 f()