为什么我不能直接为指针分配返回的引用?

Omk*_*kar 0 c++ pointers

我已经声明geta()函数返回对a的引用,我必须在int指针中收集它.代码工作正常,但为什么我不能使用注释行.是不是在做同样的事情?代码如下:

#include<iostream>
using namespace std;
class Foo
{
    int a=6;
public:
    int& geta()
    {
        return a;
    }
};
int main()
{
    Foo f;
    int &z = f.geta();          //int *p = f.geta();  Why this doesn't work?
    int *p = &z;
    cout << *p;
}
Run Code Online (Sandbox Code Playgroud)

小智 6

不要与&和*符号混淆.符号的含义在表达式和声明中是不同的.

当它在表达式中使用时,&表示address-of运算符,它返回变量的地址.

但是,当&在声明中使用(包括函数形式参数)时,它是类型标识符的一部分,用于声明引用变量(别名/备用名称).

参考和指针不是一回事. 你可以在这里查看... C++中指针变量和引用变量之间有什么区别?