Compartilhar via


Espaços para nome sem nome

Você pode declarar um espaço para nome sem nome como uma excelente alternativa ao uso de declarações de variáveis estáticas globais.

namespace { declaration-list }

Comentários

Uma definição de namespace sem nome, tendo a sintaxe mostrada acima se comporta como se ele foi substituído por:

namespace unique { declaration-list }

usando o namespace exclusivo;

Cada namespace sem nome tem um identificador atribuído e mantido pelo programa e representado aqui por exclusivo, que é diferente de todos os outros identificadores em todo o programa.Por exemplo:

// unnamed_namespaces.cpp
// C2872 expected
namespace { int i; }          // unique::i
void f() { i++; }             // unique::i++

namespace A {
    namespace {
        int i;      // A::unique::i
        int j;      // A::unique::j
    }
}

using namespace A;

void h()
{
    i++;            // C2872: unique::i or A::unique::i
    A::i++;         // A::unique::i++
    j++;            // A::unique::j++
}

Namespaces sem nome são uma substituição superior para a declaração estática de variáveis.Elas permitem que as variáveis e funções fiquem visíveis em uma unidade de conversão de inteiro, ainda não visível externamente.Embora as entidades em um espaço para nome sem nome podem ter uma ligação externa, eles são efetivamente qualificados por um nome exclusivo para sua unidade de conversão e, portanto, nunca podem ser vistos em qualquer outra unidade de conversão.

Consulte também

Referência

Namespaces (C++)