Как работает эта часть кода на C ++?

Я видел этот пример ниже в Geek For Geeks.

#include using namespace std; int &fun() { static int x = 10; return x; } int main() { fun() = 30; cout << fun(); return 0; } Answer is 30. 

Но я не могу сопоставить, как это значение достигнуто. Пожалуйста, помогите мне в том, как работает этот кусок кода.

После некоторых ответов экспертов я узнал, что назначенное функции назначено статической переменной x, которая эквивалентна fun () :: x = 30

Теперь я попробовал другой fragment кода, где у меня есть 2 статических переменных внутри fun () и возврат второй ссылки на переменные. Тем не менее, ответ равен 30. Является ли это потому, что когда назначается fun (), он присваивает значение 30 всем переменным внутри fun ()?

Второй fragment кода

 #include using namespace std; int &fun() { static int x = 10; static int y =20; return y; } int main() { fun() = 30; cout << fun(); return 0; } 

fun возвращает ссылку ( int& ) на static переменную x внутри области fun . Таким образом, выражение fun() = 30 – это fun::x = 30 . Обратите внимание, что это безопасно только потому, что x static .

функция локальных статических переменных инициализируется в первый раз в функции и сохраняется до конца программы. Поэтому, когда вы звоните

 fun() = 30; 

Вы возвращаете ссылку на эту переменную, а затем назначаете ей 30. Поскольку переменная все еще жива, она сохранит это значение. затем

 cout << fun(); 

Я хочу снова вернуть переменную. Поскольку он уже был инициализирован, он не сбрасывает свое значение и возвращает 30, так как это было установлено в предыдущей строке.