![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| mrgloom |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
если
test.h
то это тоже самое если бы мы использовали MyClass без неймспейса? |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
по поведению - да. На деле у функций при линковке будут более "испорченные" имена. Но это мало кого волнует.
Так обычно делают, когда портируют старый, C, код в C++. Так, например, сделали с C наследием в C++. Формально, все C функции переехали в std, но их можно использовать без префикса за счёт using namespace в заголовке. Это сообщение отредактировал(а) vinter - 15.11.2013, 10:49 |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
необязательно уточню.
если у тебя пара namespace c определением MyClass, то может возникнуть конфликт имён (?!). Или иная коллизия при обращении ( но никогда с таким не сталкивался). namespace - это средство упорядочения областей видимости Это сообщение отредактировал(а) akizelokro - 15.11.2013, 11:39 -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| mrgloom |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
я понимаю для чего нужен namespace
вопрос был как раз зачем в .h файле писать using MyNamespace::MyClass; |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
||||
|
||||
| mrgloom |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
поясните ? |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
mrgloom, пример.
Когда-то Вася Пупкин сделал на С++ маленькую библиотечку для себя. Он не заморачивался ни на пространства имен, ни на названия функций. Через какое-то время, эту библиотечку оценили другие программисты и стали пользоваться. Она росла и развивалась... В какой-то прекрасный момент ее захотели использовать в крупном проекте. Подключили... И при первой компиляции на этапе линковки вывалилась куча конфликтов имен функций - часть функций библиотеки совпадали сигнатурами с внутренними функциями проекта. Вася Пупкин, когда узнал о проблеме, покумекал и решили пойти простым путем - засунул все функции в некое пространство имен, а чтобы старый код компилировался сделал такие using'и. В итоге, сигнатуры функций стали отличаться от тех, что были в большом проекте. |
|||
|
||||
| mrgloom |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
ну так всё равно же надо писать тогда.
namespace1::doit() namespace2::doit() я имею ввиду что это правильный пример использования, но это не объясняет зачем в .h файле использовать using namespace. Это сообщение отредактировал(а) mrgloom - 18.11.2013, 10:12 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
mrgloom, а ты попробуй написать программу, которая использует MyClass без указания пространства имен. И увидишь, что без using она не скомпилируется.
|
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
Зачем? После using MyNamespace::MyClass; в заголовке, MyClass может быть использован без префикса везде. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
||||
|
||||
| mrgloom |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
вы имеете ввиду такую ситуацию?
допустим есть .cpp файл в нём включен .h файл с namespace1 и функцией doit() потом мы в .cpp файле используем doit() без namespace, но ведь если включено что то с namespace2::doit(), то мы уже не можем использовать просто doit()? т.е. нам надо либо использовать namespace1::doit() и namespace2::doit(), либо включать в .cpp .h файл только с одним namespace, что по-моему равнозначно вообще неиспользованию namespace. |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
всё верно. Именно поэтому мы и предположили, что это было сделано для совместимости. со старым кодом, который ничего про namespace не ведает. Ну ли просто от безграмотности |
|||
|
||||
| mrgloom |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
еще интересный участок кода
по идее же мы заиклюдим и в первом и во втором случае? смысл таких конструкций? |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
mrgloom, в 51-й раз: никто не может сказать зачем кто-то что-то сделал кроме того, кто это сделал. Но так делают при использовании кода, который не использует namespace(например C библиотеки) с оными. Т.е. всё оборачивается в namespace т.к. с точки зрения C++ так делать вернее. И, где это можно, использовать именно с явными квалификаторами. При этом добавив using namespace, чтобы не сломать весь код, который использует ту или иную библиотеку без namespace.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |