using namespace std и std:: надоело смотреть!
Запись от -=ЮрА=- размещена 06.04.2012 в 22:30
Показов 18817
Комментарии 159
Метки c++
|
Наболело поэтому несколько эмоционально: Кто нибудь понимает зачем используют using namespace std; и как глупо для каждой стандартной функции STD писать std:: - нееет???Ну тогда вам сюда в дискуссию! Итак зачем вообще используют конструкцию using namespace std - ответ прост этим мы явно указываем компилятору что хотим использовать в своём коде функции из пространства имён STD Тогда у многих встаёт вопрос: что означает конструкция std:: это явное указание области видимости? Ответ тоже прост : при такой записи компилятор также обращается к объекту(чаще всего это функция) следующего за вторым двоеточием. Итак что при использовании using namespace что при использовании std::мы всего лишь даём понять компилятору к какой функции и из какого пространства имён обращаться. А теперь у меня вопрос к вам, читающим всё это - Что это за инкубатор с std::, кто-то когда то по видимому безрукий ляпнул : "да будет std::, так правильно" и всё - понеслась. Каждый пытается обезопасить себя от какого-то потенциально опасного перекрытия пространства имён и т.д, хотя никакой опасности нет вообще. Всем скептиками предлагаю код ниже
Вывод напрашивается сам собой - накой вообще везде лепить std:: если даже без явного указания области видимости ничего страшного не произойдёт даже при использовании другого namespace-а Код с двоеточиями, нечитабелен, абсолютно такой же по функционалу что и код без std::. И ещё один момент - кто нибудь в MSDN-е встречал код с std:: именно официальный код???Ну хорошо из 100 кодов возможно пара содержит std::, остальная же часть кода дана с using namespace std; как такая которая позволяет сокращать код (прелагаю посчитать на сколько символов увеличивает std:: в каждой строчке длинну кода). Таким образом конструкция using namespace std целесообразней в плане сокращения длинны кода, нежели std::. Все гипотетичекие проблеммы перекрёстного использования пространств имён с одинаковыми функциями надуманы и обусловлены кривостью чьих-то рук, либо неправильным их расположением(я о руках) не из того места. Добавлено мной 31.07.2012 Тема оказалась душетрепещущей - предлагаю для ускорения понимания перепрыгивать с 1-й страницы сюда https://www.cyberforum.ru/blog... omment3371 и сюда https://www.cyberforum.ru/blog... omment3378 Также привожу выжимку из Шильдта
| ||||||
Метки c++
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 159
Комментарии
-
- да понятное дело что STD умещает не все функции, другое дело что садясь писать нужно обладать хотябы какими-то представлениями о стандартных функциях и методах(иногда даже своего писать не нужно).
По поводу программ ForEveR, я считаю величайшим бредом твоё приклонение перед бустом хочешь кросплатформенность освой NET технологии, тебе лишь интерпритатор под конкретную ОС нужно будет реализовывать причём не важно будет ли это турбо паскаль или Си-шарп. Я уже устаю от глупости, в частности тобой здесь пропагандируемой, послушай ты освоил Boost.Asio я освоил винсок, ты пишешь с векторами и итераторами я пишу с указателями и инкрементным пробором, у тебя Boost::threads у мня критические секции семафоры и мьютексы.
Если твой мозг не созрел до того что using namespace std или std:: обладают одинаковым функционалом, но первое предпочтительней ввиду сокращения кода - то это глубоко твои проблеммы!
Излечись от болезни буста и стд с двумя точками, она у тебя прогрессирует!!!
Запись от -=ЮрА=- размещена 21.04.2012 в 10:17
-
Все проще на самом деле. Я не гонюсь за сокращением кода. Я не преклоняюсь перед бустом - просто он удобен, вот я его и использую. Выбираю инструмент по задаче и по удобству.
А насчет .NET технологий... О да, они безмерно кроссплатформенные, настолько кроссплатформенные, что разработчики Mono никак не могут воспроизвести .NET полностью (отставания, недочеты, баги и т.д.).
А теперь вопрос. Вот ты постоянно юзаешь массивы - тебе не очень-то важна скорость, но массив должен расширяться. Ты продолжишь юзать указатели и каждый раз перевыделять память вручную или же будешь использовать вектор? Тебе нужно работать с парами ключ-значение, будешь писать свою обертку или используешь map? Тебе нужно работать с датой и временем, зачем писать свои обертки, если есть boost::date_time? Тебе нужно работать с локалью, зачем писать свое, если есть boost::locale? Нужна работа с файловой системой, так для чего использовать системно-зависимые функции, если есть boost::filesystem? Как понимаешь примеров можно привести огромное кол-во (естественно я беру в расчет, что человек не ограничен стандартами компании, например, что буст использовать просто напросто нельзя и т.д.).Запись от ForEveR размещена 23.04.2012 в 07:47
-
ForEveR ,ты юзаешь NET даже сейчас когда читаешь в своём браузере мой блог и когда с телефона заходишь в интернет тоже юзаешь NET(используешь ASP WebForms да к чему тут перечисления...), если кто-то не умеет прикрутить свои мысли к какой-либо библиотеке, то это потому что у большинства людей мозг отравлен стандартными алгоритмами(и он (мозг) уже не способен писать своё). А также зачастую многие люди просто безпросветно зависли в логике навязанной книгами, умными преподавателями, общественностью(к сожалению), мысль будет выделяться тогда когда она нестандартна. Что даёт буст - стандартизацию мысли, нет это конечно не плохо, вообще бы было здорово чтобы был общепринятый чипсет, одна на всех операционка, но делать из людей роботов тоже не есть гуд.
На счёт меня - я пока не позиционирую себя как разработчик крос-платформенного кода (ключевое слово "пока" не позиционирую, когда буду готов дам ответ что лучше буст или NET).
Теперь к насущному - мой блог посвящён STD и обсуждать что мол я умею то а ты не умеешь не стоит(я излечился от детской болезни меряться силами, и писать что либо сделай то или это не буду. Просто прими за данность - есть аспекты где конкретно ты знаешь меньше меня и наоборот где я знаю меньше тебя)Запись от -=ЮрА=- размещена 24.04.2012 в 09:45
-
Конечно я с тобой полностью согласен на тему различных аспектов. Не согласен немного насчет буста. Он дает не стандартизацию мысли - он позволяет использовать уже готовые и протестированные решения для огромного количества задач, вместо того, чтобы писать постоянно новые велосипеды, а повторное использование кода - это прекрасно. NET и буст нельзя сравнивать, пусть оба называют фреймворками, но буст - фреймворк исключительно для плюсов, NET же для многих (в будущем огромного кол-ва языков).Запись от ForEveR размещена 24.04.2012 в 10:00
-
Юр напиши пожалуйста свои мысли по поводу этого. чем бы например ты стал пользоваться.
так же интересно работаете ли вы оба с форевером программистами С. если да, то что пишете?Запись от Pure размещена 25.04.2012 в 20:14
-
Запись от ForEveR размещена 26.04.2012 в 10:30
-
по поводу static -
http://www.open-std.org/jtc1/s... losed.html
по поводу Unnamed Namespaces
http://msdn.microsoft.com/en-u... s.80).aspx
Не по теме:
по поводу работы
Я подписывал документ о неразглашении конфиденциальной информации, кто я и кем работаю не афиширую ввиду указанных причин. Можешь считать меня простым инженером с большим кругом обязанностейЗапись от -=ЮрА=- размещена 26.04.2012 в 17:21
-
Запись от Pure размещена 27.04.2012 в 21:59
-
Pure, не за что, я бы помог даже если бы ты был наркоманом или адвентистом 7-го дня или не важно кем. Вообще же Я нейтрально отношусь к людям которые не лезут в мою жизнь и жизнь моей семьи.
По поводу твоего выссказывания что
, мне тут жена(она на психолога учится) подогнала статейку, цитировать не буду, напишу дословно:
Сообщение от Pure
Так что ты это самое..ну... вобщем ты понял, что мог бы не писать, я конечно же всё понимаю))))))))))
Ты если что не переживай так по поводу своих предпочтений - к примеру половина древнегреческих мыслителей ими являлись, даже 300 храбрых спартанцев были нестандартной ориентации, так что не бойся говорить правду, здесь тебя никто не осудит!
Не по теме:
PS:Надеюсь повествовать далее в моё о своём первом опыте и предпочтениях не будешь, для этого есть общий форум а не мой блог!Если будешь писать не по теме using namespace vs std:: в дальнейшем буду просто изымать твои посты...
Запись от -=ЮрА=- размещена 28.04.2012 в 09:10
-
Запись от Pure размещена 28.04.2012 в 18:05
-
Запись от BRcr размещена 17.07.2012 в 09:49
-
Запись от ForEveR размещена 20.07.2012 в 12:44
-
Нууу я бы не был на столько категоричен, можно и "убить" неймспэйс например definе-ом
Сообщение от ForEveR
ОтработкаC++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
#include <cstdio> #include <iostream> using namespace std; namespace YurA { #define std NULL//âîò è óáèëè STD ;) int cout(const char * val) { return printf("%s",val + 5); } } int main() { cout<<"Hello World\n"; using namespace YurA; YurA::cout("Hello World\n"); //std::cout<<"Test\n"; //Âîò òóò áóäåò 'cout' : ambiguous symbol return 0; }
http://codepad.org/xqGkT6mL //отослали std в глубокий нокаут
http://codepad.org/xqkMZVMh //тщетная попытка снова использовать std::
На досуге подумаю как потом снова включить нэйм спэйс...Запись от -=ЮрА=- размещена 20.07.2012 в 13:24
-
Стоит сразу подчеркнуть, что код ВКЛ/ВЫКЛ/ВКЛ STD приведенный ниже пригоден для использования на компиляторах сходных с VisualStudio
http://codepad.org/JXEGC5K8
вот эта часть
на cc1plus не слинкуется
C++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
#include <cstdio> #include <iostream> using namespace std; namespace YurA { template <class T> void cout(T val) { std::cout<<val + 5; } } int main() { #define live std cout<<"Hello World\n"; cout<<"2 + 2 = "<<2 + 2<<"\n"; using YurA::cout; #define std NULL//âîò è óáèëè STD ;) cout(" STD Died=(\n"); cout(" 2 + 2 = "); cout(2 + 2); cout(" \n"); //std::cout<<"Test\n"; //Âîò òóò áóäåò 'cout' : ambiguous symbol #define std live //îæèâèëè STD =Ð) std::cout<<"STD Lives again!=)\n"; return 0; }
Запись от -=ЮрА=- размещена 20.07.2012 в 14:05
-
Ну логично, только std может пересекаться с пространством имен предоставляемых самой средой программирования и её типами, а также подключенными хедерами чужего кода который не использует пространства имен ( например сишные либы ).
Поэтому нужно либо хорошо знать все используемые пространства имен либо просто юзать std::Запись от Avazart размещена 20.07.2012 в 18:31
-
Avazart думаю ты плохо читал дискуссию на первых двух страницах делаем using namespace std; а все наши namespace-ы раскрываем через :: и всё. Тот кто ставит std:: просто морочит сам себе голову мои примеры перекрёсного использования функций с идентичными именами функциям стандартной библиотеки яркий тому пример. Далее вверху подан код ВКЛ/ВЫКЛ/ВКЛ абсолютно любого неймспэйса даже STD. (конечно если используем не cc1plus который даже прагама ворнинги за ошибки считает тем самым загоняя нас в глухой угол - ни шагу влево ни шагу вправо, мне такое не по душе)
Не по теме:
PS:Взрослые дяди пишут на API
Запись от -=ЮрА=- размещена 20.07.2012 в 19:34
-
Лол, Юра, про АПИ конечно круто, но кто тебе сказал, что те кто пишут не на API не взрослые дядьки?) Ну на счет using - категорически нельзя использовать в хедер файлах (еще не рекомендуют в глобальных пространствах имен) - в остальных местах можно.
А на тему использования #define-ов для отключения/включения std - грязный, непереносимый хак.
По поводу твоих примеров, да они корректны, но в С++ слишком сложная система поиска имен, чтобы полагаться на эти примеры, читай стандарт С++.Запись от ForEveR размещена 20.07.2012 в 20:00
-
Запись от BRcr размещена 20.07.2012 в 22:26
-
- ну сжевал же c11plus (я о посте с Hello word) почему тогда непереносимый?
Да я согласен делать #define std NULL это больше смахивает на "шалость проказного мальчика", но и говорить что вырубить нэймспэйс нельзя - сильное преувеличение, как я уже сказал выше
, тоже можно проделать с чем угодно если даже с базовым спэйсом катит.Запись от -=ЮрА=- размещена 20.07.2012 в 23:12
-
Ну потому что он неперносимый по стандарту. Стандарт языка пишется для того, чтобы ему следовать. А тот кто пытается сделать нечто в обход стандарта является быдлокодером. Это примерно тоже самое, что сделать #define private public, да так можно, но никто так делать не будет (в нормальных обстоятельствах).
Сообщение от -=ЮрА=-
Кстати так как в С/С++ есть директива #undef то твой код вот так будет компилироваться на любых компиляторах.
http://liveworkspace.org/code/... c38f92e5ecC++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#include <iostream> void print(int val) { std::cout << val << std::endl; } int main() { std::cout << 1 << std::endl; #define std NULL //std::cout << 1 << std::endl; print(1); #undef std std::cout << 1 << std::endl; }
Запись от ForEveR размещена 22.07.2012 в 07:33



, это связано с тем что общество в общем то отрицательно настроено по отношению к меньшинствам. Подавленность своей сущности вызывает у таких геев депрессиию и может служить причиной самоубийств или сумашествия...
