C++ 这如何返回引用?

C++ 这如何返回引用?,c++,reference,C++,Reference,我一直在尝试学习如何使用单例设计模式,但偶然发现: static S& getInstance() { static S instance; return instance; } 我在这里注意到它返回实例,它不应该返回实例& 编辑:我还应该提到,编译器似乎没有做出任何抱怨。返回实例返回对实例的引用。那就像 int& r = a; 对于某些int a创建对a的引用,而不需要编写a&或类似的内容。不,它是正确的。编译器将从函

我一直在尝试学习如何使用单例设计模式,但偶然发现:

    static S& getInstance()
    {
        static S instance;
        return instance;
    }
我在这里注意到它返回
实例
,它不应该返回
实例&


编辑:我还应该提到,编译器似乎没有做出任何抱怨。

返回实例返回对
实例的引用。那就像

int& r = a;

对于某些
int a
创建对
a
的引用,而不需要编写
a&
或类似的内容。

不,它是正确的。编译器将从函数
getInstance
创建并返回对
instance
的引用

您询问它是否应该是
实例&
。首先,这在语法上是无效的。那么
&instance
呢?它将获取
实例的地址
,因此将返回一个
实例*

&
运算符的多次使用是造成混淆的常见原因。这里有一个快速的“备忘单”,它不使用标准中复杂的术语:

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

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

int a = 7;
int& ref_a = a; // ref_a is a reference to a
当应用于变量时,
&
的一元(单参数)版本表示
运算符的
地址,并生成指向该变量的指针

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