C++ 什么是「;路过*&&引用;对于

C++ 什么是「;路过*&&引用;对于,c++,pass-by-reference,C++,Pass By Reference,这是什么意思?我理解通过引用传递是为了传递引用,这样您就可以直接修改它而无需返回,而通过指针传递与此类似,但运行时较慢。然而,我不明白*&做了什么。比如, foo(int * & var) { } 它通过引用传递指针,以便您可以更改指针指向的对象,并将这些更改反映给调用方 例如: void notByReference(int *p) { p = nullptr; } void byReference(int *&p) { p = nullptr; } in

这是什么意思?我理解通过引用传递是为了传递引用,这样您就可以直接修改它而无需返回,而通过指针传递与此类似,但运行时较慢。然而,我不明白*&做了什么。比如,

foo(int * & var) { }

它通过引用传递指针,以便您可以更改指针指向的对象,并将这些更改反映给调用方

例如:

void notByReference(int *p) {
    p = nullptr;
}

void byReference(int *&p) {
    p = nullptr;
}

int main() {
    int *i = new int;
    notByReference(i); //i is not changed since a copy of the pointer was passed
    byReference(i); //i itself is changed, leaking memory
}

这允许您通过引用传递指针。这使函数有机会修改指针并使调用者看到修改

你不必就此止步。例如,您可以通过引用传递指向int的指针

void foo(int** &var)

请记住,像
&
*
这样的类型限定符是相互独立的。当您看到
sometype&
时,它只意味着“引用
sometype
”,这反过来意味着函数可以看到调用者版本的参数并可以修改它。当
sometype
是指针时,它只意味着调用者版本的参数的类型是指针,函数可以修改该指针。

我不确定从何处开始“传递指针类似,但运行速度较慢”。无论出于何种目的,通过指针或引用传递对象的性能都是相同的(并且通过引用传递通常是使用隐藏的指针实现的)。啊,我明白了,所以notByReference就像通过值传递指针一样。@Goyatuzo,是的,它通过值传递指针,创建了一个副本。副本指向同一个对象,因此无论它指向什么,最终都可以更改,但指针本身是不同的,因此将其修改为指向其他位置只会对副本生效。太棒了!感谢您快速全面的回复!