Casa > Q > Qual É A Diferença Entre Variável Estática E Constante?

Qual é a diferença entre variável estática e constante?

O que a estática faz para as variáveis é atribuir-lhes um endereço estático (não alterável) na memória. Isto significa que a menos que o valor da variável'seja explicitamente alterado, ela terá o mesmo valor, não importa o que mais você'esteja fazendo no seu código. It's é uma "classe" de armazenamento, juntamente com variáveis "automáticas", que é memória temporária que reside na pilha, e memória que's armazenada na pilha. Cada classe de armazenamento comporta-se de forma diferente.

I'já vi casos em que é útil usar variáveis estáticas dentro de funções. O que a função faz para a variável é fornecer um escopo para sua visibilidade, não para sua vida útil (como com as variáveis locais automáticas). O código fora da função não pode acessar uma variável estática local. Isso efetivamente permite que a função mantenha o estado entre os momentos em que ela's é chamada. Para ver isso em ação, dê uma olhada na função da biblioteca padrão strtok().

Constants pode ser atribuído um valor apenas uma vez, e elas devem ser inicializadas para um valor quando são declaradas (exceto se we're falando sobre parâmetros constantes C++ e tipos de retorno em funções). They're como um enum singular, exceto que they're não são capazes de ter um tipo enum (they're apenas o tipo com que eles're declarados, como "const int"). Em todos os outros aspectos, eles se comportam como variáveis. Se eles're declarados dentro de uma função, eles saem do escopo quando a função sai. O mesmo para parâmetros const. Ao contrário da estática, const não é uma classe de armazenamento. It'é efetivamente um flag para o compilador dizendo-lhe, "Este identificador só pode ser inicializado para um valor, e nunca mais mudado"

Como mencionei, o designador de constantes em C++ pode ser usado com parâmetros e tipos de retorno em funções (static não pode, por definição, já que todos os parâmetros e valores de retorno são passados na pilha). No caso de um parâmetro, ele evita que o parâmetro seja alterado dentro da função. No caso de um valor de retorno, impede que o valor retornado seja alterado pelo chamador. Dependendo do parâmetro/tipo de retorno, ele pode ter alguns significados diferentes. Se um parâmetro/tipo de retorno for declarado const char *, ele evita que o ponteiro seja alterado (por exemplo, se algum código tentar obter o endereço do ponteiro, e alterá-lo, ou se tentar incrementá-lo/decrementá-lo). No entanto, char const * impede que o valor para o qual o ponteiro aponta seja alterado, mas permite que o ponteiro seja alterado. It's é possível fazer ambas: const char const *, neste caso o código não pode alterar o ponteiro, e não pode alterar o valor para o qual ele aponta. No caso dos parâmetros const, no que diz respeito ao chamador, não importaria se a função alterasse o ponteiro de entrada, uma vez que todos os parâmetros são de valor passante, e no nível do chamador's, o valor do ponteiro's permaneceria inalterado, não importa o quê. Entretanto, poderia importar se o valor que aponta fosse alterado pela função, já que apenas o ponteiro é passado pelo valor. Onde a declaração de parâmetro const char *, por exemplo, é (acho que) necessária é se você're tentar passar um array literalmente para uma função, tal como, SomeFn("Hello world.");

As mesmas regras para const também se aplicam a aliases, incluindo aliased parameters.

De Gombach

Qual é o propósito de ter alívio de fios? :: É bom comprar um Realme X2 Pro em 2020?