无法理解代码段的返回类型

Unable to understand the return type of the code snippet

本文关键字:返回类型 代码      更新时间:2023-10-16

我很困惑为什么这个是对的。返回值为引用类型 int& ,但是 h() 函数返回一个值int在句子 return x 中键入。那么,int回报如何变为int &

这是代码片段,可以使用C++编译器进行良好编译。

int& h() {
 int q;
 static int x;
 return x;
}

这将返回对静态int的引用。首次调用函数 h时初始化x。像这样使用它:

int& href = h();
++href; // increments the static variable
int& href2 = h(); // another reference to the same static variable

变量q应该没有影响,我认为这是可疑的。

引用意味着您实际上返回了相同的变量,因此更改返回的值将直接更改x的值 如果代码已被写入:

int h()
{
    int q;
    static int x;
    return x;
}

(即不是引用)那么你将返回x值的副本(尽管你应该公平地查看返回值优化。返回引用是有效的,但是,有时(多线程是一个明显的例子)可能是不希望和令人困惑的。

int&是对整数的引用。 x是一个整数。因此,从返回int&返回对x的引用的函数中return x;

也:

返回局部变量的引用是危险的,因为当函数退出时,局部变量会被销毁。当你得到引用时,它引用的东西不存在。这称为悬空引用,它就像一个不指向任何东西的指针。

静态变量不是局部变量,在函数退出时不会被销毁。因此,当您获得引用时,引用仍指向有效对象。