Compartilhar via


Escopo

Os nomes de C++ podem ser usados apenas em determinadas regiões de um programa. Essa área é chamada de "escopo" do nome. O escopo determina o "tempo de vida" de um nome que não denota um objeto de extensão estática. O escopo também determina a visibilidade de um nome quando os construtores e os destruidores de classe são chamados e quando as variáveis locais para o escopo são inicializadas. (Para obter mais informações, consulte Construtores e Destruidores.) Há cinco tipos de escopo:

  • **Escopo local   **Um nome declarado em um bloco é acessível somente dentro desse bloco e de blocos incluídos nele e apenas após o ponto da declaração. Os nomes de argumentos formais para uma função no escopo do bloco externo da função têm escopo local, como se tivessem sido declarados no bloco que inclui o corpo da função. Considere o fragmento de código a seguir:

    {
        int i;
    }
    

    Como a declaração de i está em um bloco entre chaves, i tem o escopo local e nunca pode ser acessado, pois nenhum código o acessa antes da chave de fechamento.

  • **Escopo da função   **Os rótulos são os únicos nomes que têm o escopo da função. Eles podem ser usados em qualquer lugar dentro de uma função, mas não podem ser acessados fora dessa função.

  • **Escopo do arquivo   **Qualquer nome declarado fora de todos os blocos ou de todas as classes têm o escopo do arquivo. Ele pode ser acessado em qualquer lugar da unidade de conversão após sua declaração. Os nomes com escopo de arquivo que não declaram objetos estáticos são chamados frequentemente de nomes globais.

    Em C++, o escopo do arquivo também é conhecido como escopo do namespace.

  • Escopo da classe   Nomes de membros de classe têm o escopo da classe. As funções de membro de classe podem ser acessadas somente usando os operadores de seleção de membros (. ou –>) ou operadores de ponteiro a membro (.* ou –>*) em um objeto ou ponteiro para um objeto dessa classe. Os dados de membros de classe não estáticos são considerados locais para o objeto dessa classe. Considere a seguinte declaração de classe:

    class Point
    {
        int x;
        int y;
    };
    

    Os membros de classe x e y são considerados como pertencentes ao escopo da classe Point.

  • **Escopo do protótipo   **Nomes declarados em um protótipo de função são visíveis somente até o final do protótipo. O protótipo a seguir declara três nomes (strDestination, numberOfElements e strSource); esses nomes saem do escopo no final do protótipo:

    errno_t strcpy_s( char *strDestination, size_t numberOfElements, const char *strSource );
    

Consulte também

Referência

Conceitos básicos