谁能告诉我这是否安全并已定义:



class RefClass
{
public:
    RefClass(int i) { this->i = i; }
    int& GetRef() { return i; }
private:
    int i;
};


RefClass rc(10);

int* refp;

{
    refp = &rc.GetRef();
}

*refp = 20;




具体来说,我关心的是嵌套范围中返回的引用的生存期,以及是否可以在该范围中对其进行引用,然后在该范围分解后作为左值取消引用。

该代码可以按预期在VS2012中编译并运行,但这并不意味着它将在下一版本中使用,因此我试图找到一个明确的答案。

最佳答案

是的,没关系。

返回的引用是临时的,持续到包含函数调用的语句结束。它在生命周期内用于设置refp指向其目标rc.i。在那之后不需要取消引用指针。

唯一的危险是,如果对象可能被破坏,则使指针悬空:

int* refp;

{
    RefClass rc(10);
    refp = &rc.GetRef();
} // rc is destroyed here

*refp = 20; // BOOM!!!

10-08 00:33