在像这样的C++函数中:
int& getNumber();
Run Code Online (Sandbox Code Playgroud)
什么&意思?它与以下不同:
int getNumber();
Run Code Online (Sandbox Code Playgroud)
ser*_*iom 34
这不一样.
int g_test = 0;
int& getNumberReference()
{
return g_test;
}
int getNumberValue()
{
return g_test;
}
int main()
{
int& n = getNumberReference();
int m = getNumberValue();
n = 10;
cout << g_test << endl; // prints 10
g_test = 0;
m = 10;
cout << g_test << endl; // prints 0
return 0;
}
Run Code Online (Sandbox Code Playgroud)
getNumberReference()返回一个引用,它就像一个指向整数变量的指针.应用于引用的任何更改都适用于返回的变量.
getNumberReference()也是一个左值,因此它可以像这样使用:
getNumberReference() = 10;
Run Code Online (Sandbox Code Playgroud)
是的,它是不同的.
&表示您返回参考.否则它将返回一个副本(好吧,有时编译器会优化它,但这不是问题).
一个例子是矢量.operator []返回&.这允许我们这样做:
my_vector[2] = 42;
Run Code Online (Sandbox Code Playgroud)
这不适用于副本.
不同之处在于,没有&你得到的是返回的int的副本,适合传递到其他例程,比较东西,或复制到你自己的变量.
有了&,你得到的本质上是包含返回整数的变量.这意味着您实际上可以将它放在赋值的左侧,如下所示:
getNumber() = 200;
Run Code Online (Sandbox Code Playgroud)