Daily bit(e) C++. Анонимные пространства имен

Добавлено 5 ноября 2026 в 04:20

Daily bit(e) C++ 169, инструмент C++11 для управления связыванием символов – анонимные пространства имен.

Daily bit(e) C++

Анонимные (безымянные) пространства имен – это отличный инструмент C++11 для управления связыванием символов.

Все символы, находящиеся внутри безымянного пространства имен, обладают внутренним связыванием – это означает, что они видны только в пределах той единицы трансляции, в которой определены.

// unit.h
namespace MyLib 
{
    void function();
}
// unit.cc

#include "unit.h"

namespace  // безымянное пространство имен
{
    void internal_function() {}
}

namespace MyLib 
{
    void function() 
    { 
        internal_function(); // OK, функция видима внутри единицы трансляции
    } 
}

void other_function() {}
// main.cc

#include "unit.h"

int main() 
{
    MyLib::function();  // OK, доступна через заголовочный файл

    void other_function(); // ручное объявление
    other_function();      // OK, внешнее связывание

    void internal_function(); // ручное объявление
    internal_function();      // Ошибка линковки, символ не виден
}

Пример на Compiler Explorer

Теги

C++ / CppDaily bit(e) C++Программирование