无法理解代码段的返回类型
Unable to understand the return type of the code snippet
我很困惑为什么这个是对的。返回值为引用类型 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;
。
也:
返回对局部变量的引用是危险的,因为当函数退出时,局部变量会被销毁。当你得到引用时,它引用的东西不存在。这称为悬空引用,它就像一个不指向任何东西的指针。
静态变量不是局部变量,在函数退出时不会被销毁。因此,当您获得引用时,引用仍指向有效对象。
相关文章:
- 如何获取std::result_of函数的返回类型
- 奇怪的结构&GCC&clang(void*返回类型)
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 为什么与常规GCC不同,即使有"学究性错误",MinGW-GCC也能容忍丢失的返回类型
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 调用C++具有复杂参数和复杂返回类型的函数 C 代码
- 为什么在下面的代码返回类型中是用于运营商重载的类类型
- 模板函数的返回类型未知,使用 decltype 时代码重复
- 如何使用enable_if设置以下 c++ 代码的返回类型
- 通用lambda,继承和尾随返回类型:此有效代码
- C++:如何在协变返回类型中重用代码
- 无法理解代码段的返回类型
- 众所周知,构造函数没有返回类型,但在下面的代码中,构造函数正在返回..任何人都能解释吗
- Visual Studio c++代码格式-返回类型+ classname::func缩进
- 返回类型而不是对象如何有效,误解代码片段
- 具有多重继承的协变返回类型.这些代码是如何工作的
- 代码重复和模板专用化(当专用函数具有不同的返回类型时)
- 为什么我不能在下面的代码中使用"pos_type"返回类型?
- 为什么当我改变函数返回类型时,c++代码的输出会改变