Удаление увеличения пространства имен в C++
Я пишу C++ в затмении. Когда я добавляю новый класс, он запрашивает пространство имен. Я добавил буст, потому что я использую буст. Когда я посмотрел на класс, затмение окружило мой класс усилением пространства имен {}. Я думал, что пространство имен было для Java/ C#, а не C++. Кроме того, я провел небольшое исследование, и похоже, что добавление увеличения пространства имен - это большое, нет, нет. Поэтому я удалил повышение пространства имен. Один вопрос, есть ли веская причина, почему я должен сохранять увеличение пространства имен и будет ли это стирать меня позже в цикле разработки?
2 ответа
Спасибо, вот что я подумала. Я не знаю, почему Eclipse хочет, чтобы я добавил пространство имен
Эмм. @ Аарон, "добавление" пространства имен - хорошая практика, если только вы не захотите вернуться в эпоху API C с символами библиотеки вечных столкновений или неуклюжими libraryx_myfunction
соглашения об именах.
На самом деле, выбор правильного пространства имен для ваших классов настолько элементарен, что я бы перефразировал это. Это не
добавление пространства имен к вашему классу;
Скорее это
создание пространства имен для вашего (позже) добавления типов и функций.
Пространства имен служат для отделения вашего кода от LibraryX и LibraryX от LibraryY и т. Д. Поэтому действительно плохая практика - выбирать имя пространства имен, которое может конфликтовать. Определение пользовательских типов прямо запрещено в std
пространство имен (или неопределенное поведение).
Помещение материала в пространства имен другой библиотеки вызывает проблемы с
- будущие расширения библиотеки
- внутренние недокументированные символы в этих библиотеках
- незначительные ошибки из-за ADL (где библиотека может начать находить ваши функции вместо своих собственных, не зная)
Хорошая причина, почему я должен держать повышение пространства имен?
Зачем? Вы расширяете библиотеку наддува? Я не вижу смысла поддерживать расширение пространства имен, фактически, для небольших проектов вам вообще не нужно пространство имен. Пространства имен предназначены для предотвращения конфликта имен, и для небольшого проекта, я сомневаюсь, что у вас есть (будьте осторожны с swap
хоть).
По сути, ваш вопрос почти такой же, как вопрос, почему я не должен окружать свой код namespace std
В конце концов, я использую стандартную библиотеку, верно?