小编Leo*_*Leo的帖子

为什么返回带引用类型的局部变量在VS2012中有效

我在下面的代码中很困惑,这在VS2012 Update 5中有效但在g ++ 8.1中失败了.

int& func()
{
    int i = 0;
    return i;
}

int main()
{
    int ri = func();
    ri++;
    std::cout << ri << std::endl; // output "1"
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

根据我的理解并参考类似的问题C++返回对局部变量的引用,它应该失败,因为i函数中的局部变量的生命周期func应该在函数调用之后结束.

但是,为什么它在VS2012中有效?

在VS2012中运行

g ++ 8.1.1失败 g ++ build with warning

在此输入图像描述

这让我无法入睡.

更新v1:
添加VS2012指定版本并更改代码以使用变量ri.

c++ visual-c++

-2
推荐指数
1
解决办法
79
查看次数

标签 统计

c++ ×1

visual-c++ ×1