![](/img/trans.png)
[英]Is casting a C++ reference from unsigned char to double& safe?
[英]double& (not passing by reference) C++
typedef double real8;
typedef real8 Real_t;
Real_t& x(int y);
什么是Real_t&
?? 我只看到一个数据类型后跟“&”表示通过引用传递。 但这是在申报行中。 这是什么意思 ?
这意味着该函数返回对Real_t
的引用,该实际上是一个double
。 Real_t
是一个real8
,如果您解析所有typedef,它是一个double
。
你在这应该小心。 如果未通过函数结尾的范围检索通过引用传递的结果,那么您将有一个悬空引用。
例如:
int& foo() {
int x = 8;
return x;
}
int main() {
int y = foo();
}
main中的变量y
最终引用一个变量,当foo()
返回时,该变量在超出范围时被销毁,因此使用它是未定义的行为 。 如果x
是从单例或者函数foo()
范围之外的东西中检索到的,那么它仍然存在,这样就可以了。
人们有时会在编译单元之间以确定的方式返回对初始化静态全局变量的引用,因此您可能会看到这与静态一起使用,如:
MyClass& MyStaticVar() {
static MyClass instance;
return instance;
}
哪个也没关系,因为初始化后程序的持续时间是静态的。
这意味着x
是一个返回对Real_t
的引用的Real_t
。
通过引用返回的示例是用于类中的数据访问。 例如, std :: vector :: at()返回对向量元素的引用。
对于安全返回引用的自由函数,函数内部必须存在不明显的内容,以确保不返回悬空引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.