INT 如何在 C++ 中作为 INT& 返回?

how is INT returned as INT& in c++?

我是一个 C++ 初学者,这段代码让我很困惑:

int global = 100;
int& setGlobal()
{
    return global;    
}
int &a=setGlobal() ;

int main(void){
    a=a+5;
    std::cout<<global<<std::endl;
}

setGlobal的return类型是int&,但是global是一个 int.

我理解的代码是这样的:

  int global = 100;
  int& x=global;

  int& setGlobal()
  {
    x+10;
    return x;    
  } 
  int main(void){
    x=x+10;
    std::cout<<global<<std::endl;
    }

也许我的问题出在参考文献上。

return 类型的 T& 为您提供 T.

类型的 returned 对象的引用

你的情况

int& setGlobal()
{
    return global;    
}

returns 对全局的引用 (int&)。基本上是别名,是访问同一变量的另一种方式。

这意味着

int &a=setGlobal() ;

a 设置为对 global 的引用,对 a 的任何操作都会反映在 global

不足为奇

int main(void){
    a=a+5;
    std::cout<<global<<std::endl;
}

打印 105。aglobal 在您的 main 范围内可以有效互换(因为一个是另一个的别名)。

如果 setGlobal returned &global,它将 returning global 地址 .地址是变量在内存中的实际位置,它不是别名。如果您想使用指针,您的代码将如下所示:

#include <iostream>

int global = 100;
int* setGlobal()
{
    return &global;    
}
int* a=setGlobal() ;

int main(void){
    *a=*a+5;
    std::cout<<global<<std::endl;
}

请注意我们无法直接使用 a 访问 global 的内容(它只是一个地址)。我们必须先取消引用它。

而且,您还应该知道,由于 setGlobal() return 在您的示例中是对 global 的引用,它可以直接用作左值来访问 global 像这样:

setGlobal() += 5;

将上述语句放在打印之前将导致显示“110”。好玩的东西!我邀请您在空闲时间阅读有关左值和右值的内容,作为您 C++ 之旅的下一步!