【发布时间】:2015-07-10 08:13:41
【问题描述】:
我正在尝试使用 C++ 引用并遇到以下情况: 考虑以下代码
void foo(float &y)
{
float k = 0.0;
k += 20.1;
y = k;
cout << "y = " << y << endl;
}
int main() {
float i;
foo(i);
i+=10.00;
cout<<"value of I after returning is :: "<<i<<endl;
return 0;
}
程序编译并运行。输出是:
y = 20.1
value of i after returning is :: 30.1
现在发生这种情况,我的困境是......在函数“foo”中,我们将 y(它是对 i 的引用)分配为 k。而 k 的作用域只在那个函数中。所以一旦函数返回,k 应该被销毁并且 i 的值应该是一些未定义的值。 但出乎我的意料,函数后 i 的值为 k。
我是否遗漏了什么或理解不同的东西......?对理解这里发生的事情有什么帮助吗? 提前致谢。
【问题讨论】:
-
尝试 foo(float* y) 和主 foo(&i)
-
“所以一旦函数返回,k应该被销毁并且i的值应该是一些未定义的值。”
y = k;它会被复制,不用担心。 -
我 100% 确定这已经被覆盖过:一个引用只能被“设置”到它的被引用对象一次——在这种情况下是在调用
foo时。y=k仅将main中i的值设置为foo中k的值。 -
您已为 y 分配了一个新值,但此处未显示参考。
-
Different question 有类似的答案
标签: c++ memory reference arguments return-value