2012-08-06 99 views
1
typedef double real8; 

typedef real8 Real_t; 

Real_t& x(int y); 

什么是Real_t&?我只看到一个数据类型,后面跟着“&”来表示按引用传递。 但是这是在申报行中。这是什么意思 ?double&(not pass by reference)C++

+0

这意味着通过引用。 – 2012-08-06 18:29:08

+0

这个**是一个声明行。它声明'x'。 – 2012-08-06 18:33:14

回答

7

这意味着该函数返回对Real_t的引用,它实际上是doubleReal_treal8,如果您解决所有类型定义,则这是double

你应该在这里小心。如果通过引用传递的结果不是从存在于该函数末尾的作用域中检索的,那么您将有一个悬挂引用。

例如:

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

int main() { 
    int y = foo(); 
} 

可变,y,在主最终参考,因为它出去的范围时foo()返回哪个已被破坏的变量,因此使用它是未定义的行为 。如果x已从单身人士或超出功能foo()范围之外的东西中找到,那么它仍然存在,但这样可以。

人们有时会返回引用在编译单元之间以确定的方式来初始化静态全局变量,所以你可能会看到这个使用像静:

MyClass& MyStaticVar() { 
    static MyClass instance; 
    return instance; 
} 

这也没关系,因为静态生活的持续时间初始化后的程序。

7

这意味着x是一个函数,它返回对Real_t的引用。

通过引用返回的示例是类中的数据访问。例如,std::vector::at()返回对矢量元素的引用。

对于一个免费的函数来安全地返回一个引用,函数内部必须有一些不明显的事情来确保不会返回一个悬挂引用。