Может кто-нибудь объяснить, как работает оператор c ++ = здесь? - PullRequest
0 голосов
/ 29 июня 2019

У меня есть небольшой фрагмент кода на c ++, может кто-нибудь объяснить, как здесь работает оператор?

#include <iostream>
#include <string>

    using namespace std;

    static wstring & test() {
        static wstring test2;
        return test2;
   };


   int main()
   {
       test() = L"Then!";
       wcerr << test() << endl;
   }

Ответы [ 2 ]

1 голос
/ 29 июня 2019

Функция 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;
}
0 голосов
/ 29 июня 2019

Функция test() возвращает ссылку в static переменную test2.Ссылка относится к переменной;Вы можете заменить переменную вместо ссылки.

Это эквивалентно коду:

static wstring test2;
int main()
{
    test2 = L"Then!";
    wcerr << test2 << endl;
}

Найдите в своей любимой ссылке на C ++ "ссылки".

...