Исходя из Java, вы можете не понимать, что в C++ реализация часто находится в отдельном файле (.cpp, .cc) из объявления класса (.h, .hpp). Лучшее, что нужно делать с функциями утилиты, которые нужно только в одном файле cpp, - разместить их в анонимном пространстве имен .
namespace {
void my_utility_function(const Something &something {
// bunch of code
}
} // close namespace
Эта функция видна везде в этом файле CPP вперед, , но не в других местах. Таким образом, методы класса, которые нуждаются в my_utility_function
, реализованы ниже.
Когда функция находится в названном пространстве имен, компоновщик собирается испускать данные для него и тратить время на поиск в другом месте программы. Даже если вы избегаете конфликтов имен (используя пространство имен), это пустая трата процессора. Это также документы, что это в основном частные. В C, один помечен как функция static
с тем же эффектом, но static
имеет много разных значений, а AFAIK - это анонимное пространство имен.
Вы можете вложить анонимное пространство имен в именованное пространство имен, если весь файл cpp живет в пространстве имен.
Кто должен иметь возможность вызвать частную функцию пространства имен? – dreamlax
Только foo должен иметь доступ к частной функции. – user1811367
Эти два примера не эквивалентны. Первый - в области класса, другой области пространства имен. – 0x499602D2