C++ 双程证;(不通过引用传递)C++;

C++ 双程证;(不通过引用传递)C++;,c++,reference,double,declaration,C++,Reference,Double,Declaration,什么是真正的&??我只看到一个后跟“&”的数据类型,表示通过引用传递。 但这是在声明行。这意味着什么?它意味着x是一个返回对实\u t的引用的函数 通过引用返回的示例是类中的数据访问。例如,返回对向量元素的引用 为了让自由函数安全地返回引用,函数内部必须有一些不明显的情况,以确保不返回悬空引用。这意味着函数返回一个对实\u t的引用,它实际上是一个双。Real\u t是一个real8,如果解析所有typedef,它是一个double 你在这里应该小心。如果通过引用传递的结果没有从函数结束时存在的

什么是真正的&??我只看到一个后跟“&”的数据类型,表示通过引用传递。
但这是在声明行。这意味着什么?

它意味着
x
是一个返回对
实\u t
的引用的函数

通过引用返回的示例是类中的数据访问。例如,返回对向量元素的引用


为了让自由函数安全地返回引用,函数内部必须有一些不明显的情况,以确保不返回悬空引用。

这意味着函数返回一个对
实\u t
的引用,它实际上是一个
Real\u t
是一个
real8
,如果解析所有typedef,它是一个
double

你在这里应该小心。如果通过引用传递的结果没有从函数结束时存在的作用域中检索,那么您将有一个悬空引用。

例如:

typedef double real8;

typedef real8 Real_t;

Real_t& x(int y);
main中的变量
y
最终指向一个变量,该变量在
foo()
返回时超出范围,因此使用它是未定义的行为。如果
x
是从一个单例或位于函数
foo()
范围之外的某个对象中检索到的,那么它仍然会存在,这样就可以了

人们有时返回引用以在编译单元之间以确定性的方式初始化静态全局变量,因此您可能会看到它与静态一起使用,如:

int& foo() {
    int x = 8;
    return x;
}

int main() {
    int y = foo();
}
这也没关系,因为静态在初始化后的程序期间内有效。

这是一个声明行。它声明
x
MyClass& MyStaticVar() {
    static MyClass instance;
    return instance;
}