返回要在函数中销毁的变量

时间:2018-11-19 13:21:00

标签: c++

在函数调用return时j被破坏

k在包围括号的末端被破坏了

如果我为j传递9,则会创建k并将其分配为81

返回k将设置func1,func1是对整数= k的引用

返回将立即终止功能

我的问题是,k和j是否在return语句处终止?

如果它们是func1,则不应引用任何内容...

但是我试图运行此代码,它可以工作...

int& func1(int j){
 int k = j*j;
 return(k);
}

2 个答案:

答案 0 :(得分:1)

  

它有效...

不,它出现正常工作。当您尝试访问func1返回的引用时,您将进入“未定义行为”领域。那时所有的赌注都没有了,它可以打印出42,什么也不打印,崩溃,吃掉CMOS电池等。

答案 1 :(得分:0)

  

如果它们是func1,则不应引用任何内容...

您是正确的。尝试使用参考更多时间,您将看到:

#include <iostream>

int& func1(int j) {
    int k = j * j;
    return(k);
}

int main() {
    int& addr = func1(9);

    for (int i = 0; i < 10; ++i) {
        std::cout << addr << '\n';
    }
}

输出:

81
2758456
2758456
2758456
2758456
2758456
2758456
2758456
2758456
2758456