Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование полных имен с областью имен. 
V
    Опции темы
Хоббит
Дата 17.2.2009, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1263
Регистрация: 6.11.2005

Репутация: нет
Всего: 1



На c++ часто встречаю код, где всегда полностью указываются имена классов, структур, функций и.т.д. boost::shared_ptr std::cout
Более того многие источники так и советуют делать вместо к примеру using namespace boost; using namespcae std;
Почему так?
PM MAIL   Вверх
vinter
Дата 17.2.2009, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(Хоббит @  17.2.2009,  11:47 Найти цитируемый пост)
; using namespcae std;

Код

#include <iostream>
using namespace std;

template <class T>
void min(T a, T b)
{
    cout << "Hello, I'm inside the custom min!!!";
}



int main(int argc, char** argv)
{
    int a= 0, b = 3;
    min(a, b);
    std::cin.get();
}

собери этот код и все поймешь


--------------------
Мой блог
PM MAIL WWW   Вверх
Earnest
Дата 17.2.2009, 12:44 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(Хоббит @  17.2.2009,  11:47 Найти цитируемый пост)
Более того многие источники так и советуют делать вместо к примеру using namespace boost; using namespcae std;

Ко всему нужно отноститься разумно. using namespace вносит в глобальную область все имена данного namespace, поэтому как-бы нивелирует все выгоды от его использования и порождает двусмысленности. Тем не менее, от категоричных высказываний я бы отказалась. В нашей группе действуют такие правила: в хедерах usind namespace запрещено категорически; внутри cpp файла запрещено using namespace std, но можно boоst и свои пространства; наконец, внутри функции - что угодно.


--------------------
...
PM   Вверх
bsa
Дата 17.2.2009, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(Earnest @ 17.2.2009,  12:44)
В нашей группе действуют такие правила: в хедерах usind namespace запрещено категорически; внутри cpp файла запрещено using namespace std, но можно boоst и свои пространства; наконец, внутри функции - что угодно.

У нас аналогично. Но в cpp файлах разрешено использовать только раскрытие области имен того класса, который в нем описывается.
PM   Вверх
Хоббит
Дата 18.2.2009, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1263
Регистрация: 6.11.2005

Репутация: нет
Всего: 1



А как объявить using namespace внутри функции?
PM MAIL   Вверх
Alek86
Дата 18.2.2009, 19:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(Хоббит @  18.2.2009,  19:40 Найти цитируемый пост)
А как объявить using namespace внутри функции?

написать using namespace внутри функции?


--------------------
user posted image    user posted image
PM MAIL   Вверх
cutwater
Дата 18.2.2009, 19:50 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: 1
Всего: 10



Написать using namespace внутни функции.


--------------------
user posted image
PM MAIL   Вверх
ИванМ
Дата 20.2.2009, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 1
Всего: 23



Цитата(Хоббит @  17.2.2009,  10:47 Найти цитируемый пост)
Почему так? 

Для того, чтобы не пересекались имена функций/классов из разных модулей.
PM MAIL   Вверх
Earnest
Дата 22.2.2009, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(ИванМ @  20.2.2009,  22:45 Найти цитируемый пост)
Для того, чтобы не пересекались имена функций/классов из разных модулей. 

Вот пример из жизни.  Есть функции 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 - это оружие массового поражения, нужно применять аккуратно.
 



--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0580 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.