C++ 中的隐式取消引用到底是什么意思?这是否意味着当我将对变量的引用传递给函数参数时,我不需要它前面的 & 来使用它的值?
问问题
7257 次
2 回答
12
我假设您的老师试图解释指针和引用之间的区别。
将引用称为执行隐式取消引用的精美指针是相对常见的(尽管在技术上并不准确)。
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.
于 2011-07-10T04:02:01.537 回答
4
C++ 将隐式取消引用指针的另一个上下文是函数指针:
void foo() { printf("foo\n"); }
void bar() {
void (*pf)() = &foo;
(*pf)(); // Explicit dereference.
pf(); // Implicit dereference.
}
于 2011-07-11T09:50:13.437 回答