![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Хоббит |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: нет Всего: 1 |
На c++ часто встречаю код, где всегда полностью указываются имена классов, структур, функций и.т.д. boost::shared_ptr std::cout
Более того многие источники так и советуют делать вместо к примеру using namespace boost; using namespcae std; Почему так? |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
собери этот код и все поймешь |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Ко всему нужно отноститься разумно. using namespace вносит в глобальную область все имена данного namespace, поэтому как-бы нивелирует все выгоды от его использования и порождает двусмысленности. Тем не менее, от категоричных высказываний я бы отказалась. В нашей группе действуют такие правила: в хедерах usind namespace запрещено категорически; внутри cpp файла запрещено using namespace std, но можно boоst и свои пространства; наконец, внутри функции - что угодно. -------------------- ... |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
У нас аналогично. Но в cpp файлах разрешено использовать только раскрытие области имен того класса, который в нем описывается. |
|||
|
||||
| Хоббит |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: нет Всего: 1 |
А как объявить using namespace внутри функции?
|
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
написать using namespace внутри функции? |
|||
|
||||
| cutwater |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: 1 Всего: 10 |
Написать using namespace внутни функции.
|
|||
|
||||
| ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 1 Всего: 23 |
||||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Вот пример из жизни. Есть функции std::min \ max. И вот один умник в заголовочном файле ну очень большой программы однажды пишет using std::min; using std::max, решив, что функция эта используется очень часто, и влом лишние буквы писать. А чтобы не путать это дело с макросами min\max из windef.h (наследием славного C), в том же заголовке добавил #undef min, max. Типа сделал всем хорошо. И длилось это "хорошо" довольно долго (несколько лет). А потом к приложению подключили 3d-party библиотеку. А там использовались макросы min\max из windef.h. Не так, чтобы часто, но зато в заголовках (в инлайн-функциях). В общем, тут счастье и кончилось, т.к. std::min\max - функции, требующие четкой типизации аргументов. Т.е. вызывать max с аргументами "немного" разных типов (int, UINT) - не пройдет (без лишних слов). А библиотека, использовавшая старые добрые макросы, именно так и поступала, не заморачиваясь. Короче, пришлось все эти голые min\max из приложения выкорчевывать (в количестве многих сотен). Еще то счастье... А теперь представьте, что a) в библиотеке нет путаницы с типами б) речь идет не о min\max, а о какой-то другой функции, причем представление о том, что эта функции делает, у библиотеки немного другое... Компилятор ничего не сообщит, только вот работать это будет через ... раз. В общем, using - это оружие массового поражения, нужно применять аккуратно. -------------------- ... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |