У меня есть несколько функций в программе, которую я пишу, которая использует значение, которое мне нужно вычислить с очень медленной функцией. Это значение будет меняться при каждом повторном запуске программы, поэтому я не могу просто сохранить статическое значение. Ниже приведен пример.Статическое ключевое слово сохраняет значение, возвращаемое функцией?
void this_gets_called_frequently()
{
static int value = slow_function();
//do stuff with the above value
}
Моя основная проблема здесь не в одной из программ, которые не работают, а не в аккуратности. Я действительно не хочу инициализировать глобальную переменную и хранить в ней значение, поскольку она не будет меняться после вычисления. Будет ли использование ключевого слова static таким образом, как показано выше, только вызывать функцию выше, которую нужно вычислить один раз? Будет ли добавлено ключевое слово const?
Спасибо всем, на это был дан ответ!
У вас есть это точно - статическая локальная переменная будет инициализирована только один раз, когда первый фрагмент кода выполняется. –
@MarkRansom: если 'slow_function()' выбрасывает исключение;) –
Да, если вы не находитесь на C++ 03 и вызываете 'this_gets_called_frequently' из нескольких потоков. IIRC C++ 11 молча гарантирует, что 'value' инициализируется только один раз только одним потоком. – sbabbi