&在函数声明返回类型中

jaz*_*azz 1 c++ return function memory-address

以下是什么意思?

class Something
{
 public:
   int m_nValue;

   const int& GetValue() const { return m_nValue; }
   int& GetValue() { return m_nValue; }
};
Run Code Online (Sandbox Code Playgroud)

此代码取自此处.

Gri*_*han 5

它表示通过引用返回值:

   int& GetValue()
     ^ Means returns a reference of int
Run Code Online (Sandbox Code Playgroud)

喜欢

int i = 10;

int& GetValue() {
    int &j = i;
    return j;
}
Run Code Online (Sandbox Code Playgroud)

ji全局变量的参考.

注意:在C++中,您有三种变量:

  1. 值变量例如int i = 10.
  2. 引用变量(例如int &j = i; 引用变量)创建其他变量的别名,两者都是相同内存位置的符号名称.
  3. 地址变量:int* ptr = &i.叫做指针.指针变量用于保存变量的地址.

尊重声明

   Pointer:
           int  *ptr = &i;
                ^      ^  & is on the left side as an address operation
                |
                * For pointer variable.

   Reference:

           int &j = i;
               ^
               | & on the right side for reference
Run Code Online (Sandbox Code Playgroud)

记住在C中你只有两种变量值和地址(指针).引用变量在C++中,引用很容易使用,如值变量和指针变量.

指针就像:

                      j = &i;

                      i                   j
                   +------+            +------+
                   | 10   |            | 200  |
                   +------+            +------+
                     202                 432
Run Code Online (Sandbox Code Playgroud)

参考如下:

                   int &j = i;

                    i, j
                   +------+
                   | 10   |
                   +------+
Run Code Online (Sandbox Code Playgroud)

没有为j分配内存.它是内存中相同位置的别名.

C++中指针变量和引用变量之间有什么区别?

  1. 指针可以重新分配任意次数,而初始化后无法重新分配引用.
  2. 指针可以指向NULL,而引用永远不会指向NULL
  3. 您不能使用指针来获取引用的地址
  4. 没有"参考算术"(但您可以获取引用指向的对象的地址,并在其上执行指针算术,如&obj + 5).

因为您评论时,您对指针和引用变量之间的差异有疑问,所以我强烈建议您从我在答案中给出的链接中阅读相关页面.