Форум программистов, компьютерный форум, киберфорум
-=ЮрА=-
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

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::, так правильно" и всё - понеслась. Каждый пытается обезопасить себя от какого-то потенциально опасного перекрытия пространства имён и т.д, хотя никакой опасности нет вообще.
Всем скептиками предлагаю код ниже
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
namespace my
{
    template <class T>
    T cout(T param)
    {
        return param;
    }
}
 
int main()
{
    cout<<"Test\n";
    cout<<my::cout("Test\n");
    system("pause");
    return 0;
}
Как видим ничего не случилось что в своей программе использую std::cout и my::cout
Вывод напрашивается сам собой - накой вообще везде лепить 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
Также привожу выжимку из Шильдта
using namespace std;
Эта инструкция делает пространство имён std текущим, что позволяет получить прямой доступ к именам функций и классов, определённых в библиотеке языка Standard Си, без необходимости каждый раз с помощью оператора расширения области видимости уточнять, что используется пространство имён std.
Тем не менее, если пожелаете, может перед каждым идентификатором ставить имя пространства имён std и оператор расширения области видимости - ошибки не будет.
Если в вашей программе не предусмотрено широкое использование библиотеки языка Standard C++, вы можете не вводить пространство имён std в глобальную область видимости.
Однако, если в вашей программе содержатся тысячи ссылок на стандартные библиотечные имена, включить в программу идентификатор std гораздо проще, чем добавлять его чуть ли не к каждой инструкции.
ссылка на первоисточник http://khpi-iip.mipk.kharkiv.e... lava13.pdf
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.JPG
Просмотров: 318
Размер:	14.5 Кб
ID:	506  
Метки c++
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 159
Комментарии
  1. Старый комментарий
    Аватар для -=ЮрА=-
    Дичайший бред. В STL содержатся далеко не все нужные функции.
    - да понятное дело что STD умещает не все функции, другое дело что садясь писать нужно обладать хотябы какими-то представлениями о стандартных функциях и методах(иногда даже своего писать не нужно).
    По поводу программ ForEveR, я считаю величайшим бредом твоё приклонение перед бустом хочешь кросплатформенность освой NET технологии, тебе лишь интерпритатор под конкретную ОС нужно будет реализовывать причём не важно будет ли это турбо паскаль или Си-шарп. Я уже устаю от глупости, в частности тобой здесь пропагандируемой, послушай ты освоил Boost.Asio я освоил винсок, ты пишешь с векторами и итераторами я пишу с указателями и инкрементным пробором, у тебя Boost::threads у мня критические секции семафоры и мьютексы.
    Если твой мозг не созрел до того что using namespace std или std:: обладают одинаковым функционалом, но первое предпочтительней ввиду сокращения кода - то это глубоко твои проблеммы!
    Излечись от болезни буста и стд с двумя точками, она у тебя прогрессирует!!!
    Запись от -=ЮрА=- размещена 21.04.2012 в 10:17 -=ЮрА=- вне форума
  2. Старый комментарий
    Аватар для ForEveR
    Все проще на самом деле. Я не гонюсь за сокращением кода. Я не преклоняюсь перед бустом - просто он удобен, вот я его и использую. Выбираю инструмент по задаче и по удобству.
    А насчет .NET технологий... О да, они безмерно кроссплатформенные, настолько кроссплатформенные, что разработчики Mono никак не могут воспроизвести .NET полностью (отставания, недочеты, баги и т.д.).

    А теперь вопрос. Вот ты постоянно юзаешь массивы - тебе не очень-то важна скорость, но массив должен расширяться. Ты продолжишь юзать указатели и каждый раз перевыделять память вручную или же будешь использовать вектор? Тебе нужно работать с парами ключ-значение, будешь писать свою обертку или используешь map? Тебе нужно работать с датой и временем, зачем писать свои обертки, если есть boost::date_time? Тебе нужно работать с локалью, зачем писать свое, если есть boost::locale? Нужна работа с файловой системой, так для чего использовать системно-зависимые функции, если есть boost::filesystem? Как понимаешь примеров можно привести огромное кол-во (естественно я беру в расчет, что человек не ограничен стандартами компании, например, что буст использовать просто напросто нельзя и т.д.).
    Запись от ForEveR размещена 23.04.2012 в 07:47 ForEveR вне форума
  3. Старый комментарий
    Аватар для -=ЮрА=-
    О да, они безмерно кроссплатформенные, настолько кроссплатформенные, что разработчики Mono никак не могут воспроизвести .NET полностью
    ForEveR ,ты юзаешь NET даже сейчас когда читаешь в своём браузере мой блог и когда с телефона заходишь в интернет тоже юзаешь NET(используешь ASP WebForms да к чему тут перечисления...), если кто-то не умеет прикрутить свои мысли к какой-либо библиотеке, то это потому что у большинства людей мозг отравлен стандартными алгоритмами(и он (мозг) уже не способен писать своё). А также зачастую многие люди просто безпросветно зависли в логике навязанной книгами, умными преподавателями, общественностью(к сожалению), мысль будет выделяться тогда когда она нестандартна. Что даёт буст - стандартизацию мысли, нет это конечно не плохо, вообще бы было здорово чтобы был общепринятый чипсет, одна на всех операционка, но делать из людей роботов тоже не есть гуд.
    На счёт меня - я пока не позиционирую себя как разработчик крос-платформенного кода (ключевое слово "пока" не позиционирую, когда буду готов дам ответ что лучше буст или NET).
    Теперь к насущному - мой блог посвящён STD и обсуждать что мол я умею то а ты не умеешь не стоит(я излечился от детской болезни меряться силами, и писать что либо сделай то или это не буду. Просто прими за данность - есть аспекты где конкретно ты знаешь меньше меня и наоборот где я знаю меньше тебя)
    Запись от -=ЮрА=- размещена 24.04.2012 в 09:45 -=ЮрА=- вне форума
  4. Старый комментарий
    Аватар для ForEveR
    Конечно я с тобой полностью согласен на тему различных аспектов. Не согласен немного насчет буста. Он дает не стандартизацию мысли - он позволяет использовать уже готовые и протестированные решения для огромного количества задач, вместо того, чтобы писать постоянно новые велосипеды, а повторное использование кода - это прекрасно. NET и буст нельзя сравнивать, пусть оба называют фреймворками, но буст - фреймворк исключительно для плюсов, NET же для многих (в будущем огромного кол-ва языков).
    Запись от ForEveR размещена 24.04.2012 в 10:00 ForEveR вне форума
  5. Старый комментарий
    Аватар для Pure
    Юр напиши пожалуйста свои мысли по поводу этого. чем бы например ты стал пользоваться.


    так же интересно работаете ли вы оба с форевером программистами С. если да, то что пишете?
    Запись от Pure размещена 25.04.2012 в 20:14 Pure вне форума
  6. Старый комментарий
    Аватар для ForEveR
    Анонимными ns пользуемся. Да программист на С++. Контора - система электронной коммерции по продаже авиа/концертных билетов (работаем с тремя gds системами : sirena2000, sabre, amadeus), с большим кол-вом платежных агентов и т.д.
    Запись от ForEveR размещена 26.04.2012 в 10:30 ForEveR вне форума
  7. Старый комментарий
    Аватар для -=ЮрА=-
    по поводу static -
    The use of the static keyword is deprecated with declaring objects in a namespace scope
    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 -=ЮрА=- вне форума
  8. Старый комментарий
    Аватар для Pure
    Спасибо тебе Юра. За все.

    Я не гей
    Запись от Pure размещена 27.04.2012 в 21:59 Pure вне форума
  9. Старый комментарий
    Аватар для -=ЮрА=-
    Pure, не за что, я бы помог даже если бы ты был наркоманом или адвентистом 7-го дня или не важно кем. Вообще же Я нейтрально отношусь к людям которые не лезут в мою жизнь и жизнь моей семьи.

    По поводу твоего выссказывания что
    Цитата Сообщение от Pure
    Я не гей
    , мне тут жена(она на психолога учится) подогнала статейку, цитировать не буду, напишу дословно:
    там вообщем шла речь о том что 90% геев бояться на людях сказать об этом и поэтому всячески пытаются показать
    что они не геи(вот такими как твое к примеру выссказываниями), это связано с тем что общество в общем то отрицательно настроено по отношению к меньшинствам. Подавленность своей сущности вызывает у таких геев депрессиию и может служить причиной самоубийств или сумашествия...
    Так что ты это самое..ну... вобщем ты понял, что мог бы не писать, я конечно же всё понимаю))))))))))
    Ты если что не переживай так по поводу своих предпочтений - к примеру половина древнегреческих мыслителей ими являлись, даже 300 храбрых спартанцев были нестандартной ориентации, так что не бойся говорить правду, здесь тебя никто не осудит!

    Не по теме:

    PS:Надеюсь повествовать далее в моё о своём первом опыте и предпочтениях не будешь, для этого есть общий форум а не мой блог!Если будешь писать не по теме using namespace vs std:: в дальнейшем буду просто изымать твои посты...

    Запись от -=ЮрА=- размещена 28.04.2012 в 09:10 -=ЮрА=- вне форума
  10. Старый комментарий
    Аватар для Pure
    спасибо еще раз и за этот развернутый ответ.

    теперь буду использовать как ты научил using namespace
    Запись от Pure размещена 28.04.2012 в 18:05 Pure вне форума
  11. Старый комментарий
    Аватар для BRcr
    А есть ли возможность прекратить действие комманды using namespace? Или ограничить область ее действия?
    Запись от BRcr размещена 17.07.2012 в 09:49 BRcr вне форума
  12. Старый комментарий
    Аватар для ForEveR
    Цитата Сообщение от BRcr
    А есть ли возможность прекратить действие комманды using namespace? Или ограничить область ее действия?
    Конечно, если использовать директиву локально (в функции к примеру) или не в глобальном пространстве имен. А вот прекратить нету.
    Запись от ForEveR размещена 20.07.2012 в 12:44 ForEveR вне форума
  13. Старый комментарий
    Аватар для -=ЮрА=-
    Цитата Сообщение от ForEveR
    Конечно, если использовать директиву локально (в функции к примеру) или не в глобальном пространстве имен. А вот прекратить нету.
    Нууу я бы не был на столько категоричен, можно и "убить" неймспэйс например definе-ом
    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;
    }
    Отработка
    Hello World
    World
    http://codepad.org/xqGkT6mL //отослали std в глубокий нокаут
    http://codepad.org/xqkMZVMh //тщетная попытка снова использовать std::
    На досуге подумаю как потом снова включить нэйм спэйс...
    Запись от -=ЮрА=- размещена 20.07.2012 в 13:24 -=ЮрА=- вне форума
  14. Старый комментарий
    Аватар для -=ЮрА=-
    Стоит сразу подчеркнуть, что код ВКЛ/ВЫКЛ/ВКЛ STD приведенный ниже пригоден для использования на компиляторах сходных с VisualStudio
    http://codepad.org/JXEGC5K8
    вот эта часть
    #define std live //оживили STD =Р)
    std::cout<<"STD Lives again!=)\n";
    на 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 -=ЮрА=- вне форума
  15. Старый комментарий
    Аватар для Avazart
    Если уж пишем как "взрослые дяди" то давайте писать как "взрослые дяди", свой код в свой нэймспейс и не мучаемся, а пространство имён STD используем как базовое.
    Ну логично, только std может пересекаться с пространством имен предоставляемых самой средой программирования и её типами, а также подключенными хедерами чужего кода который не использует пространства имен ( например сишные либы ).

    Поэтому нужно либо хорошо знать все используемые пространства имен либо просто юзать std::
    Запись от Avazart размещена 20.07.2012 в 18:31 Avazart вне форума
  16. Старый комментарий
    Аватар для -=ЮрА=-
    Avazart думаю ты плохо читал дискуссию на первых двух страницах делаем using namespace std; а все наши namespace-ы раскрываем через :: и всё. Тот кто ставит std:: просто морочит сам себе голову мои примеры перекрёсного использования функций с идентичными именами функциям стандартной библиотеки яркий тому пример. Далее вверху подан код ВКЛ/ВЫКЛ/ВКЛ абсолютно любого неймспэйса даже STD. (конечно если используем не cc1plus который даже прагама ворнинги за ошибки считает тем самым загоняя нас в глухой угол - ни шагу влево ни шагу вправо, мне такое не по душе)

    Не по теме:

    PS:Взрослые дяди пишут на API

    Запись от -=ЮрА=- размещена 20.07.2012 в 19:34 -=ЮрА=- вне форума
  17. Старый комментарий
    Аватар для ForEveR
    Лол, Юра, про АПИ конечно круто, но кто тебе сказал, что те кто пишут не на API не взрослые дядьки?) Ну на счет using - категорически нельзя использовать в хедер файлах (еще не рекомендуют в глобальных пространствах имен) - в остальных местах можно.
    А на тему использования #define-ов для отключения/включения std - грязный, непереносимый хак.

    По поводу твоих примеров, да они корректны, но в С++ слишком сложная система поиска имен, чтобы полагаться на эти примеры, читай стандарт С++.
    Запись от ForEveR размещена 20.07.2012 в 20:00 ForEveR вне форума
  18. Старый комментарий
    Аватар для BRcr
    Странная штука - способ объявить намерение использовать пространство имен есть, а способа объявить намерение не делать этого нет...
    Вот с таких вещей и появляются в инструкциях строчки типа "доработать напильником"
    Запись от BRcr размещена 20.07.2012 в 22:26 BRcr вне форума
  19. Старый комментарий
    Аватар для -=ЮрА=-
    А на тему использования #define-ов для отключения/включения std - грязный, непереносимый хак.
    - ну сжевал же c11plus (я о посте с Hello word) почему тогда непереносимый?

    Да я согласен делать #define std NULL это больше смахивает на "шалость проказного мальчика", но и говорить что вырубить нэймспэйс нельзя - сильное преувеличение, как я уже сказал выше
    http://codepad.org/xqGkT6mL //отослали std в глубокий нокаут
    , тоже можно проделать с чем угодно если даже с базовым спэйсом катит.
    Запись от -=ЮрА=- размещена 20.07.2012 в 23:12 -=ЮрА=- вне форума
  20. Старый комментарий
    Аватар для ForEveR
    Цитата Сообщение от -=ЮрА=-
    - ну сжевал же c11plus (я о посте с Hello word) почему тогда непереносимый?

    Да я согласен делать #define std NULL это больше смахивает на "шалость проказного мальчика", но и говорить что вырубить нэймспэйс нельзя - сильное преувеличение, как я уже сказал выше
    , тоже можно проделать с чем угодно если даже с базовым спэйсом катит.
    Ну потому что он неперносимый по стандарту. Стандарт языка пишется для того, чтобы ему следовать. А тот кто пытается сделать нечто в обход стандарта является быдлокодером. Это примерно тоже самое, что сделать #define private public, да так можно, но никто так делать не будет (в нормальных обстоятельствах).

    Кстати так как в С/С++ есть директива #undef то твой код вот так будет компилироваться на любых компиляторах.
    C++
    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;
    }
    http://liveworkspace.org/code/... c38f92e5ec
    Запись от ForEveR размещена 22.07.2012 в 07:33 ForEveR вне форума
 
Новые блоги и статьи
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru