Pergunta

Tenho várias funções em um programa que estou escrevendo que usam um valor que preciso calcular com uma função muito lenta.Esse valor mudará toda vez que o programa for executado novamente, portanto não posso simplesmente armazenar um valor estático.Abaixo está um exemplo.

void this_gets_called_frequently()
{
    static int value = slow_function();

    //do stuff with the above value
}

Meu principal problema aqui não é o programa não funcionar, mas sim a limpeza.Eu realmente não quero inicializar uma variável global e armazenar o valor nela, já que ela não mudará depois de calculada.Usar a palavra-chave estática da maneira mostrada acima chamaria apenas a função acima para ser calculada uma vez?Uma palavra-chave const adicionada ajudaria?

Obrigado a todos, isso foi respondido perfeitamente!

Foi útil?

Solução

Sim, uma inicialização do local static variável acontecerá no máximo uma vez (embora eu me lembre de que algumas versões do compilador podem ter problemas com multithreading aqui).const não é obrigatório; neste caso, é principalmente uma questão de legibilidade e gosto.

Outras dicas

Usar a palavra-chave estática da maneira mostrada acima chamaria apenas a função acima para ser calculada uma vez?

Sim, na primeira invocação de this_gets_called_frequently

Uma palavra-chave const adicionada ajudaria?

Não.Mas adicione const pelo valor da documentação.

Use pode usar as variáveis ​​​​locais do thread do C++ 11, se estiverem disponíveis em seu compilador.Se você estiver no Windows, poderá usar semelhantes TlsAlloc API.Está lá desde o início do Win32.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top