什么是“通过*&”对于?

时间:2012-09-30 19:01:59

标签: c++ pass-by-reference

这是什么意思?我理解通过引用传递的使用是传入引用,因此您可以直接更改它而无需返回,并且传递指针类似但运行时较慢。但是,我不明白什么*&确实。例如,

foo(int * & var) { }

3 个答案:

答案 0 :(得分:5)

它通过引用传递指针,以便您可以更改指针指向的内容并将这些更改反映给调用者。

例如:

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
}

答案 1 :(得分:2)

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

你不需要在那里停下来。例如,您可以通过引用传递指向int的指针。

void foo(int** &var)

答案 2 :(得分:1)

请注意,&*等类型限定符彼此独立。当您看到some_type&时,它只是表示“引用sometype”,这反过来意味着该函数会看到调用者的参数版本并可以对其进行修改。当sometype是一个指针时,它只意味着调用者的参数版本的类型是一个指针,该函数可以修改该指针。