Каково различие между заголовочным файлом и пространством имен?

Я хочу знать точное различие между Заголовочным файлом (как в MyHeader.hpp) и a namespace в c++?

14
задан Fantastic Mr Fox 23 February 2018 в 05:23
поделиться

4 ответа

Заголовочные файлы являются настоящими файлами - хранятся в файловой системе, на них ссылаются по имени файла, и #include'd в других файлах (по крайней мере, в C/C++ или других языках, использующих макропрепроцессор M4). В заголовочных файлах обычно группируются части кода, которые являются взаимозависимыми частями одного и того же конкретного элемента. Например, в игре может быть заголовочный файл для всего графического рендеринга.

Пространства имен, с другой стороны, являются элементом языка программирования - они существуют не как объект файловой системы, а скорее как обозначение в коде, сообщающее компилятору, что определенные вещи находятся в данном пространстве имен. Пространства имен обычно группируют интерфейсы (функции, классы/структуры, типы) схожих (но не обязательно взаимозависимых) элементов. Например, пространство имен std в C++ содержит все функции и классы Стандартной библиотеки.

18
ответ дан 1 December 2019 в 08:42
поделиться

На обычном человеческом языке заголовочный файл - это уникальный файл в файловой системе, а пространство имен охватывает один или несколько файлов.

Т.е. HeaderFile - это физическая вещь, а пространство имен - логическая вещь.

узнать больше о них можно здесь http://en.wikipedia.org/wiki/Namespace и http://en.wikipedia.org/wiki/Header_file

0
ответ дан 1 December 2019 в 08:42
поделиться

Заголовочный файл - это файл, который предназначен для включения в исходные файлы. Обычно они содержат объявления определенных классов и функций.

Пространство имен позволяет коду классифицировать идентификаторы. То есть классы, функции и т. Д. Могут быть помещены в пространство имен, сохраняя их отдельно от других классов, которые не связаны между собой. Например, в C ++ все из стандартной библиотеки находится в пространстве имен std .

3
ответ дан 1 December 2019 в 08:42
поделиться

Чтобы узнать, что такое заголовочный файл, вам нужно знать значение слова «объявление».

Проще говоря, в C / C ++ компиляция выполняется отдельно для каждого источника. Если у меня есть A.cpp и внутри я использую функцию foo (), которая будет определена где-то в другом месте, мне нужно сказать компилятору, что: «Эй, я использую foo (), хотя вы не видите, что она определена где-либо в моем исходном коде, не Не волнуйтесь, это определено в другом источнике ». Они способ сообщить компилятору об этом, "объявив" foo () в A.cpp.

Если я являюсь автором foo (), каждый, кто использует foo (), должен записать объявление void foo (); в исходном файле. Будет много дублированной и бессмысленной работы. И мне так сложно сказать парню, что он "использует" foo (), чтобы иметь правильное объявление. Поэтому как автор foo () я записываю файл, содержащий объявление для использования foo (), и распространяю его так, чтобы люди могли просто «импортировать» содержимое файла в свой источник. Я распространяю файл заголовка. Действие импорта - #include в C / C ++. Да, #include - это не что иное, как вставка содержимого включенного файла в место #include.


Пространство имен - это отдельная история. Короче говоря, вы можете думать, что это «настоящее» имя функции / класса и т. Д., Например, если я сделаю

namespace FOO {
  class Bar { }
}

Класс на самом деле не называется Bar, его «настоящее» имя на самом деле FOO :: Bar .

В C ++ есть способ избавить вас от ввода длинного настоящего имени с помощью «using».

15
ответ дан 1 December 2019 в 08:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: