2016-09-27 102 views
0

据我所知,它是未定义的引用返回到局部变量的函数,如:返回一个参考给本地变量

int& returnIntRef_One() 
{ 
    int value = 5; 

    return value; 

} 

但是,在这个函数:

int& returnIntRef_Two() 
{ 
    int i = 5; 
    int &value =i; 

    return value; 
} 

的价值似乎会恢复正常。

是否有人可以给我解释一下什么区别?

谢谢

+4

未定义的行为 – Jovasa

+0

这两个片段是相同的,第二个只是给编译器增加了一些提示 –

+2

“将Ref返回到局部变量”......是一个否定的,除非该变量已被声明为“static”。 –

回答

1

以任何方式访问悬挂引用都是未定义的行为。因此第二个例子也是未定义的行为。所以什么都可能发生。它有时工作,它可能会崩溃其他时候,它可能不会崩溃,但可能会给垃圾值等

总之你不要以为它会永远工作,因此你不能使用它。

+0

Downvote原因是什么? – taskinoor