C ++中的隐式取消引用究竟是什么意思?这是否意味着当我将对变量的引用传递给函数参数时,我不需要&在它面前使用它的价值?
答案 0 :(得分:10)
我认为你的教学试图解释指针和参考文献之间的区别。
将引用称为隐式反引用的花式指针是相对常见的(虽然技术上不准确)。
int x = 5;
int* xP = &x;
int& xR = x;
xR = 6; // If you think of a reference as a fancy pointer
// then here there is an implicit de-reference of the pointer to get a value.
*xP = 7; // Pointers need an explicit de-reference.
正确的思考方式是不来使用“A reference is a fancy pointer”。您需要以自己的方式考虑引用。它们基本上是现有变量的另一个名称(AKA别名)。
因此,当您通过引用函数传递变量时。这意味着该函数正在使用您通过其别名传递的变量。该函数具有现有变量的另一个名称。当函数修改变量时,它会修改原始变量,因为参考是原始变量(只是它的另一个名称)。
所以回答你的问题:
我不需要&在它面前使用它的价值?
不,您不需要添加&。
int f(int& x) // pass a value by reference
{
x =5;
}
int plop = 8;
f(plop);
// plop is now 5.
答案 1 :(得分:3)
C ++将隐式取消引用指针的另一个上下文是函数指针:
void foo() { printf("foo\n"); }
void bar() {
void (*pf)() = &foo;
(*pf)(); // Explicit dereference.
pf(); // Implicit dereference.
}