这个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;
我一直在尝试学习如何使用单例设计模式并偶然发现了这个:
static S& getInstance()
{
static S instance;
return instance;
}
我在这里注意到它 return 是 instance
,不应该是 return 和 instance&
吗?
编辑:我还应该提到编译器似乎没有提出任何投诉。
return instance;
return 引用了 instance
。就是这样
int& r = a;
对于某些 int a
创建对 a
的引用而无需编写 a&
或类似的东西。
不,写的是正确的。编译器将从函数 getInstance
.
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;