我一直在努力学习如何使用单身设计模式并偶然发现:
static S& getInstance()
{
static S instance;
return instance;
}
我注意到它返回instance
,不应该返回instance&
吗?
编辑:我还应该提到编译器似乎没有提出任何投诉。
答案 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;