这如何返回引用?

时间:2015-01-28 19:06:38

标签: c++ reference

我一直在努力学习如何使用单身设计模式并偶然发现:

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

我注意到它返回instance,不应该返回instance&吗?

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

2 个答案:

答案 0 :(得分:7)

return instance;会返回对instance的引用。这就像

int& r = a;
某些int a

会创建对a的引用,而无需编写a&或类似内容。

答案 1 :(得分:2)

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

你问它是否应该是instance&。首先,这在语法上并不合适。那么&instance怎么样?这将采用instance的地址,因此会返回instance *

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

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

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;