在C++中,函数返回类型后的含义是什么?

Nel*_*ess 38 c++

在像这样的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)


Nic*_*yer 26

是的,该int&版本返回对a的引用int.该int版本将返回一个int由值.

请参阅C++ FAQ中有关参考的部分

  • 而不是通过一个回答他的问题而只是以迂回方式回答他的问题的大文件来阅读OP,为什么不写一个展示差异的10行程序. (28认同)

Tri*_*ner 9

是的,它是不同的.

&表示您返回参考.否则它将返回一个副本(好吧,有时编译器会优化它,但这不是问题).

一个例子是矢量.operator []返回&.这允许我们这样做:

my_vector[2] = 42;
Run Code Online (Sandbox Code Playgroud)

这不适用于副本.


T.E*_*.D. 5

不同之处在于,没有&你得到的是返回的int的副本,适合传递到其他例程,比较东西,或复制到你自己的变量.

有了&,你得到的本质上是包含返回整数的变量.这意味着您实际上可以将它放在赋值的左侧,如下所示:

getNumber() = 200;
Run Code Online (Sandbox Code Playgroud)