这个return怎么参考?

How does this return a reference?

我一直在尝试学习如何使用单例设计模式并偶然发现了这个:

    static S& getInstance()
    {
        static S instance;
        return instance;
    }

我在这里注意到它 return 是 instance,不应该是 return 和 instance& 吗?

编辑:我还应该提到编译器似乎没有提出任何投诉。

return instance; return 引用了 instance。就是这样

int& r = a;

对于某些 int a 创建对 a 的引用而无需编写 a& 或类似的东西。

不,写的是正确的。编译器将从函数 getInstance.

创建并 return 对 instance 的引用

你问是不是应该instance&。首先,这在语法上是无效的。那么 &instance 呢?这将采用 instance 的地址,因此 return 和 instance *.

& 运算符的多次使用是一个常见的混淆来源。这是一个不使用标准中的复杂术语的快速 "cheat-sheet":

& 的二进制(两个参数)版本应用于变量的两个实例并表示按位与(重载时除外)。

unsigned int a = 7;
unsigned int b = 3;
unsigned int c = a & b; // c = 3

& 的一元(一个参数)版本应用于类型时表示对类型的引用。示例:

int a = 7;
int& ref_a = a; // ref_a is a reference to a

& 的一元(一个参数)版本应用于变量时表示 address-of 运算符并生成指向变量的指针。

int a = 7;
int* ptr_a = &a;