忽略可能在下面的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);
}
因此,在使用引用参数时,可以在不明显可见的位置创建静态值副本吗?
EDIT 我在询问是否可以使用引用参数创建实际值副本。当在第二种情况下使用指针时,我明确地取消引用指针传递值,但是使用引用参数有时会隐式地解除引用吗?是我的问题。
答案 0 :(得分:0)
我在询问是否可以使用引用参数创建实际值副本。
绝对。它作为参考的事实是无关紧要的。你可以像它引用的对象一样对待它。
当在第二种情况下使用指针时,我明确地取消引用指针传递值,但是使用引用参数有时会隐式地解除引用吗?
您将引用视为某种隐藏指针。这个术语在这里并没有什么帮助。 "解引用"你是指针,而不是参考。事实上,该标准已经改为使用"执行间接"而不是" dereference"帮助澄清这一点。关键是,引用不被解除引用,因为这不是发生的事情 - 你只是复制被引用的对象。