什么概念在这里工作,在哪里可以应用?

amu*_*ous 2 c++

#include<iostream>

using namespace std;

int &fun()
{
   static int x;
   return x;
}   

int main()
{
   fun() = 10;
   cout<<fun();
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

上述程序输出10.但我很困惑这个程序实际上是如何工作的.

Gri*_*han 5

fun()返回静态变量的引用x,在第一个表达式中main():

 fun() = 10;
  ^       ^
  |       x assigned 10
   returned x 
Run Code Online (Sandbox Code Playgroud)

因为静态变量的值在不同的函数调用之间持续存在,所以在下一个表达式中:

cout << fun();
           ^
           return x with value 10
Run Code Online (Sandbox Code Playgroud)

注意:因为您正在返回静态变量的引用,所以它不是未定义的行为.

  • @ H2CO3我认为Grijesh的意思是"如果变量不是'静态'那将是UB" (5认同)