Функция test()
возвращает ссылку (а не копию) на статическую переменную test2
. Ключевое слово static заставляет функцию test
поддерживать значение переменной test2
между вызовами. Следовательно, когда вы вызываете test()
, он возвращает ссылку, позволяющую вам изменить значение test2
внутри test()
. Это приводит к wcerr << test2 << endl;
распечатке "Тогда!"
Обратите внимание, что ключевое слово static имеет различное значение в зависимости от контекста. При статической функции функция становится видимой только для других функций в файле. Если вы поместите статическую функцию в заголовок, у вас будет замедление для этой функции для каждого #include этого заголовка.
То, что вы, вероятно, хотели сказать, это
#include <iostream>
#include <string>
using namespace std;
wstring & test() {
static wstring test2;
return test2;
}
int main()
{
test() = L"Then!";
wcerr << test() << endl;
}