Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
参考-为什么以下两个程序产生不同的输出? 最近我阅读了C++中的引用。我知道引用的基本属性,但我仍然无法理解为什么下面两个程序会产生不同的输出 #include<iostream> using namespace std; int &fun() { static int x = 10; return x; } int main() { fun() = 30; cout << fun(); return 0; }_C++_Reference_Static_Output - Fatal编程技术网

参考-为什么以下两个程序产生不同的输出? 最近我阅读了C++中的引用。我知道引用的基本属性,但我仍然无法理解为什么下面两个程序会产生不同的输出 #include<iostream> using namespace std; int &fun() { static int x = 10; return x; } int main() { fun() = 30; cout << fun(); return 0; }

参考-为什么以下两个程序产生不同的输出? 最近我阅读了C++中的引用。我知道引用的基本属性,但我仍然无法理解为什么下面两个程序会产生不同的输出 #include<iostream> using namespace std; int &fun() { static int x = 10; return x; } int main() { fun() = 30; cout << fun(); return 0; },c++,reference,static,output,C++,Reference,Static,Output,此程序产生的输出为10。是因为在第一次调用之后,x被赋值为30,而在第二次调用之后,由于它是一个局部变量,它又被重写为10?我哪里错了?请解释。在第一种情况下,fun()返回对同一变量的引用,无论调用多少次 在第二种情况下,fun()在每次调用时返回对不同变量的悬空引用。函数返回后,引用无效 当你使用 fun() = 30; 在第二种情况下,设置的变量值不再有效。理论上,这是一种未定义的行为 在第二种情况下,当您第二次调用fun()时,变量x被设置为10。这与对同一函数的第一次调用无关。只是增

此程序产生的输出为
10
。是因为在第一次调用之后,
x
被赋值为
30
,而在第二次调用之后,由于它是一个局部变量,它又被重写为
10
?我哪里错了?请解释。

在第一种情况下,
fun()
返回对同一变量的引用,无论调用多少次

在第二种情况下,
fun()
在每次调用时返回对不同变量的悬空引用。函数返回后,引用无效

当你使用

fun() = 30;
在第二种情况下,设置的变量值不再有效。理论上,这是一种未定义的行为


在第二种情况下,当您第二次调用
fun()
时,变量
x
被设置为
10
。这与对同一函数的第一次调用无关。

只是增加了已经说过的内容。第一个案例行为背后的原因是,它是一个
静态变量,具有静态持续时间。静态持续时间意味着对象或变量在程序启动时分配,在程序结束时取消分配


这意味着,一旦第一种情况下的
x
第一次用
10
初始化,下一个函数调用将忽略
静态int x=10
因为
x
无法再次实例化,因为它已经被分配,只需继续
返回x
,它将与
main
中分配的
30
相同
x
,基本上,您的理解是正确的,除了在第二种情况下,您正在处理的局部变量的悬挂引用无效,这是未定义的行为,意味着一切都是可能的。您所说的只是其中一种可能性,它也可能导致其他情况,例如获取随机数、程序崩溃等

fun() = 30;