在函数调用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);
}
答案 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