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

using namespace std и std:: надоело смотреть!

Запись от -=ЮрА=- размещена 06.04.2012 в 22:30
Показов 18846 Комментарии 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. Старый комментарий
    Аватар для -=ЮрА=-
    При этом Forever мой код попроще будет и внутри {} можно будет использовать функции конкретного неймспейса(думаю очевидно что для одной функции лучше было бы записать std::swap My::swap а вот если надо будет поюзать строк 80 кода именно с функциями конкретного спейса то это как раз самое оно. Кстати я об этом писал что допустимо в сложном коде для пары вызовов юзать space:: а не городить времянку. Я не против этого, я против тотального space:: к каждому будяку в коде
    Запись от -=ЮрА=- размещена 31.07.2012 в 13:34 -=ЮрА=- вне форума
  2. Старый комментарий
    Аватар для -=ЮрА=-

    Не по теме:

    Я на обед, вернусь продолжим обсуждение без матов(мне нравиться конструтивные бесседы а не наезды - так круче общаться:))

    Запись от -=ЮрА=- размещена 31.07.2012 в 13:36 -=ЮрА=- вне форума
  3. Старый комментарий
    Аватар для ForEveR
    Про вызов статического метода...

    A data or function member of a class may be declared static in a class definition, in which case it is a
    static member of the class.
    A static member s of class X may be referred to using the qualified-id expression X::s; it is not necessary to
    use the class member access syntax (5.2.5) to refer to a static member. A static member may be referred
    to using the class member access syntax, in which case the object expression is evaluated. [ Example:
    C++
    1
    2
    3
    4
    5
    6
    7
    8
    
    struct process {
    static void reschedule();
    };
    process& g();
    void f() {
    process::reschedule(); // OK: no object necessary
    g().reschedule(); // g() is called
    }
    — end example ]
    Вообщем никакого временного объекта естественно нет. Ну ты бы хоть книжку почитал что-ли или стандарт, прежде чем спорить, право.

    Pure, о нет. Ты дико не прав. Это управление на этапе написания/компиляции, никак не на этапе выполнения. И код некомпилябельный чуть более чем полностью http://liveworkspace.org/code/... ebb185395a
    Запись от ForEveR размещена 31.07.2012 в 13:40 ForEveR вне форума
  4. Старый комментарий
    Аватар для vxg
    пример для 1 http://codepad.org/mdbeqZHP
    Запись от vxg размещена 31.07.2012 в 13:43 vxg вне форума
  5. Старый комментарий
    Аватар для vxg
    пример для 2 http://codepad.org/KZXSSJMW
    Запись от vxg размещена 31.07.2012 в 13:48 vxg вне форума
  6. Старый комментарий
    Аватар для vxg
    пример для противопоказаний к использованию using опишу словами.
    если у вас есть одноименные классы: глобальный, в пространстве one и в пространстве two и вы интенсивно используете в коде эти классы, то, очевидно без использования указания области видимости вам придется постоянно переключать пространства имен, что не очень эстетично и может быть опасно так как напоминает работу с операторскими скобками - забыл поставить лишний using и программа начала работать по другому. если, как уже упоминалось, конструкторы вызываются в неком выражении - вообще нет возможности решить такую ситуацию при помощи using. пример, безусловно, рассматривает самый худший и практически не встречающийся вариант, но какие-то черты этого примера могут проявляться и в реальных проектах.
    Запись от vxg размещена 31.07.2012 в 13:53 vxg вне форума
  7. Старый комментарий
    Аватар для vxg
    в использовании пространства имен и статических функций/данных классов есть определенное сходство за исключением того, что для статических членов класса нет аналога using. на это сходство я и указал где-то в начале. в рамках такого подхода использование префиксов с указанием области видимости выглядит гармоничным и полностью вписывается в объектно-ориентированный подход. использование using, при таком рассмотрении, напоминает хук наподобие goto. может поэтому люди и пишут std::
    Запись от vxg размещена 31.07.2012 в 13:56 vxg вне форума
  8. Старый комментарий
    Аватар для ForEveR
    Цитата Сообщение от vxg
    в использовании пространства имен и статических функций/данных классов есть определенное сходство за исключением того, что для статических членов класса нет аналога using. на это сходство я и указал где-то в начале. в рамках такого подхода использование префиксов с указанием области видимости выглядит гармоничным и полностью вписывается в объектно-ориентированный подход. использование using, при таком рассмотрении, напоминает хук наподобие goto. может поэтому люди и пишут std::
    А вы сами собственно как пишите? Часто используете using? Я например пишу на работе, мы не используем директив/деклараций using (почти) потому как используем достаточно много различных пространств имен и базового по большому счету нет да и код без using мне нравится куда больше, чем такой же, но с using-ом, по крайней мере сразу понятно что к чему.
    Запись от ForEveR размещена 31.07.2012 в 13:59 ForEveR вне форума
  9. Старый комментарий
    Аватар для Pure
    Pure, о нет. Ты дико не прав. Это управление на этапе написания/компиляции, никак не на этапе выполнения. И код некомпилябельный чуть более чем полностью
    не совсем. однако в ++ namespace сделан иначе. Признаю изначально первый CHOICE был вынесен над main, от этого первая распечатка была корректна, затем внутри мэйна еще один нэймспэйс перекрывал глобальный и отрабатывала вторая распечатка, т.е. было 2 спэйса с одинаковым именем, это ввело меня в заблуждение (радостное), что в ++ так же как в АС этим можно управлять и я переместил первый спэйс внутрь, и естественно все стало на свои места). печаль)). но язык развивается и думается мне, что это поправят, если возникнет надобность. Ну а про остальное, от своих слов не отказываюсь. конфликты - это скорее от несогласованности разработки. уж это вполне очевидно. это некий "костыль" который исправляет последствия человеческого фактора
    Запись от Pure размещена 31.07.2012 в 14:08 Pure вне форума
  10. Старый комментарий
    Аватар для vxg
    сам пишу без using. дискомфорта не испытываю. хотя написание текста вида
    C++
    1
    2
    3
    4
    5
    6
    7
    
        for
        (
            std::list<polyline *>::iterator i = lst.begin();
            i != lst.end();
            i++
        )
        {}
    первые пару часов угнетало обилием двоеточий и невозможностью впихнуть все в одну строку.
    Запись от vxg размещена 31.07.2012 в 14:09 vxg вне форума
  11. Старый комментарий
    Аватар для ForEveR
    Цитата Сообщение от Pure
    не совсем. однако в ++ namespace сделан иначе. Признаю изначально первый CHOICE был вынесен над main, от этого первая распечатка была корректна, затем внутри мэйна еще один нэймспэйс перекрывал глобальный и отрабатывала вторая распечатка, т.е. было 2 спэйса с одинаковым именем, это ввело меня в заблуждение (радостное), что в ++ так же как в АС этим можно управлять и я переместил первый спэйс внутрь, и естественно все стало на свои места). печаль)). но язык развивается и думается мне, что это поправят, если возникнет надобность. Ну а про остальное, от своих слов не отказываюсь. конфликты - это скорее от несогласованности разработки. уж это вполне очевидно.
    Но в любом случае это не этап выполнения. Это этап компиляции.
    Запись от ForEveR размещена 31.07.2012 в 14:10 ForEveR вне форума
  12. Старый комментарий
    Аватар для Pure
    Цитата Сообщение от vxg
    часов угнетало обилием двоеточий и невозможностью впихнуть все в одну строку.
    это по сути вечный спор, как и в смежных темах. УДОБСТВО.
    специально что СКРЫТЬ длинные конструкции в язык ввели typedef. Поскольку длинные конструкции усложняю восприятие.
    Поэтому вопрос выглядит так:
    какой выбор, облегчить написание кода (в плане отсутствия конфликтов с тем что писали другие) или облегчить восприятие кода, теми кто будет его читать.
    Что чаще делают пишут или читают код? Ответ даст результат в пользу одного или второго
    Запись от Pure размещена 31.07.2012 в 14:18 Pure вне форума
  13. Старый комментарий
    Аватар для ForEveR
    Цитата Сообщение от Pure
    это по сути вечный спор, как и в смежных темах. УДОБСТВО.
    специально что СКРЫТЬ длинные конструкции в язык ввели typedef. Поскольку длинные конструкции усложняю восприятие.
    Поэтому вопрос выглядит так:
    какой выбор, облегчить написание кода (в плане отсутствия конфликтов с тем что писали другие) или облегчить восприятие кода, теми кто будет его читать.
    Что чаще делают пишут или читают код? Ответ даст результат в пользу одного или второго
    Рулит в таких случаях auto (С++11).
    Запись от ForEveR размещена 31.07.2012 в 14:18 ForEveR вне форума
  14. Старый комментарий
    Аватар для vxg
    читают чаще. поэтому и пишут std:: - сопровождение всегда ставиться на первое место.
    Запись от vxg размещена 31.07.2012 в 14:23 vxg вне форума
  15. Старый комментарий
    Аватар для Pure
    Цитата Сообщение от ForEveR
    Но в любом случае это не этап выполнения. Это этап компиляции.
    да. и там и там время компиляции. все верно
    Запись от Pure размещена 31.07.2012 в 14:27 Pure вне форума
  16. Старый комментарий
    Аватар для -=ЮрА=-
    Касательно call-ов функций и временных объектов
    http://codepad.org/cMk2cX9l
    In function 'int main()':
    Line 36: error: cannot call member function 'virtual int CTest::GetLen()' without object
    compilation terminated due to -Wfatal-errors.
    т.е наличие объекта предполагается. Вообще же мой пост о CDialog:: преследовал следующие цели
    в коде можем записать
    CDialog::SetWindowText
    CDialog::GetClientRect
    и т.д. а можем сразу пользоваться тем что все эти функции уже унаследованы - т.е просто вызывать их по имени. Причём если мы их не перегрузим сами как я проделал это с SetWindowText то будет работать прототип CDialog::SetWindowText -> CWnd::SetWindowText но это не значит что я не могу перегрузить CDialog::SetWindowText равно как и такую же для послдеующих классов котороые наследуют CDialog. Т.е таким же образом можно использовать using namespace которая явно указывает компилятору функциями какого спейса надо оперировать и в space:: уже нет надобности
    Запись от -=ЮрА=- размещена 31.07.2012 в 14:27 -=ЮрА=- вне форума
  17. Старый комментарий
    Аватар для Pure
    Цитата Сообщение от vxg
    читают чаще. поэтому и пишут std:: - сопровождение всегда ставиться на первое место.
    читают чаще поэтому и пишут typedef стараясь уйти от громоздких конструкций вида std::kuku::boost
    поскольку современные среды позволят интерактивно отобразить, что спрятано за typedef, выгодно спятать монстроконструкцию и очистить код
    Запись от Pure размещена 31.07.2012 в 14:29 Pure вне форума
  18. Старый комментарий
    Аватар для ForEveR
    Цитата Сообщение от -=ЮрА=-
    Касательно call-ов функций и временных объектов
    http://codepad.org/cMk2cX9l
    т.е наличие объекта предполагается. Вообще же мой пост о CDialog:: преследовал следующие цели
    в коде можем записать
    CDialog::SetWindowText
    CDialog::GetClientRect
    и т.д. а можем сразу пользоваться тем что все эти функции уже унаследованы - т.е просто вызывать их по имени. Причём если мы их не перегрузим сами как я проделал это с SetWindowText то будет работать прототип CDialog::SetWindowText -> CWnd::SetWindowText но это не значит что я не могу перегрузить CDialog::SetWindowText равно как и такую же для послдеующих классов котороые наследуют CDialog. Т.е таким же образом можно использовать using namespace которая явно указывает компилятору функциями какого спейса надо оперировать и в space:: уже нет надобности
    У тебя функция не статическая в твое примере (по url-у).
    Запись от ForEveR размещена 31.07.2012 в 14:31 ForEveR вне форума
  19. Старый комментарий
    Аватар для vxg
    Юра, вы смотрели мои объяснения в чем были не правы ваши преподаватели и примеры написанные во время вашего обеда? там никаких временных объектов нет.
    Запись от vxg размещена 31.07.2012 в 14:33 vxg вне форума
  20. Старый комментарий
    Аватар для Pure
    -=ЮрА=-,временного объекта там нет. Умей признавать ошибки.
    потомок содержит в себе весь хлам от предка. при вызове функции предка, специально предок не создается, потому что предок - часть потомка и уже создан.

    Но самое важное во всем этом не упорство Юры. А то, что привело к этому. Его сбило именно явное квалифицирование, что лишний раз подтверждает факт того как воспринимаются замусоренные квалификаторами тексты. И стоит все таки признать, что using это классная фича призванная очистить код, то о чем говорит Юра, НО увы человеческий фактор может свести на нет все удобства языка.

    Т.е. по хорошему те книжки, которые учат писать std:: по каждому чиху, призывают не к продуманному проектированию и согласованию действий разработчиков, а к некому ИЗБЕГАНИЮ тех проблем, которые уже наворочали задавая одинаковые имена имеющие глобальную видимость и подключая к проектам разные либы содержащие ОДИНАКОВЫЕ имена переменных и функций. Бишь если вы пишете программу и подключаете сторонние либы, содержащие ОДИНАКОВЫЕ имена функций, вы должны понимать что вы делаете и зачем вам оное.
    Запись от Pure размещена 31.07.2012 в 14:33 Pure вне форума
 
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
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 (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru