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

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

Запись от -=ЮрА=- размещена 06.04.2012 в 22:30
Показов 18823 Комментарии 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 , я специально подавал код с using namespace std не std::
    Вот компиляция в том же ливвёкспэйс
    http://liveworkspace.org/code/... 2d6ffccaa1
    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
    30
    
    #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
    #undef std
    #define std live //îæèâèëè STD =Ð)
        std::cout<<"STD Lives again!=)\n";
        return 0;
    }
    Можно сказать что это ещё одна доп возможность using namespace - можем вырубать/врубать нэймспэйсы когда и где захотим...
    PS:От меня спасибо за undef - NICE, а я балда с прагмой мучался
    Запись от -=ЮрА=- размещена 24.07.2012 в 12:09 -=ЮрА=- вне форума
  2. Старый комментарий
    Аватар для grizlik78
    Цитата Сообщение от -=ЮрА=-
    но и говорить что вырубить нэймспэйс нельзя - сильное преувеличение, как я уже сказал выше
    Сказочник ты. Отменить действие using namespace нельзя. Даже в VC. Вот испортить префикс std, как у тебя, можно, да. Но дефайном можно испортить что угодно, даже ключевые слова.
    Запись от grizlik78 размещена 25.07.2012 в 03:11 grizlik78 вне форума
  3. Старый комментарий
    Аватар для -=ЮрА=-
    Сказочник ты. Отменить действие using namespace нельзя. Даже в VC. Вот испортить префикс std, как у тебя, можно, да. Но дефайном можно испортить что угодно, даже ключевые слова.
    Не хочу ничего говорить вот две ссылки
    http://codepad.org/jb4HbmFc
    http://liveworkspace.org/code/... 58fc13954e
    Пускай я испортил, украл, стёр, да не важно, что я сделал по ссылкам отработка показывающая отключение базовых методов пространства STD - что это как не своего рода отключение, если дальше самый главный метод вывода не воспринимается??Тут речь шла включить выключить неймспейс в разрезе - чтобы функции не действовали. Ну так ответь действует cin cout после define std NULL???
    Запись от -=ЮрА=- размещена 25.07.2012 в 20:42 -=ЮрА=- вне форума
  4. Старый комментарий
    Аватар для grizlik78
    Дефайны ты стал использовать когда речь зашла о том, что нельзя прекратить действие глобального "using namespace". Так вот, прекратить действие глобального using namespace по прежнему нельзя. А то что можно "задефайнить" std это не секрет. так же можно задефайнить и for, и if, и break.
    А неотключаемость using это главный аргумент против глобального использования using в заголовочных файлах. Локально — пожалуйста, используй сколько душе угодно.
    Запись от grizlik78 размещена 25.07.2012 в 21:13 grizlik78 вне форума
  5. Старый комментарий
    Аватар для vxg
    Цитата Сообщение от ForEveR
    на счет using - категорически нельзя использовать в хедер файлах (еще не рекомендуют в глобальных пространствах имен) - в остальных местах можно.
    Господи, наконец то. Как же у вас тут весело. Для симметрии нужно завести тему "как сократить размер кода определяя функции в определении класса".
    Запись от vxg размещена 26.07.2012 в 09:47 vxg вне форума
  6. Старый комментарий
    Аватар для -=ЮрА=-
    Мне надоело толочь воду в ступе
    Берём читаем http://khpi-iip.mipk.kharkiv.e... lava13.pdf
    Касательно using namespace std и std:
    using namespace std;
    Эта инструкция делает пространство имён std текущим, что позволяет получить прямой доступ к именам функций и классов, определённых в библиотеке языка Standard Си, без необходимости каждый раз с помощью оператора расширения области видимости уточнять, что используется пространство имён std.
    Тем не менее, если пожелаете, может перед каждым идентификатором ставить имя пространства имён std и оператор расширения области видимости - ошибки не будет.
    Если в вашей программе не предусмотрено широкое использование библиотеки языка Standard C++, вы можете не вводить пространство имён std в глобальную область видимости.
    Однако, если в вашей программе содержатся тысячи ссылок на стандартные библиотечные имена, включить в программу идентификатор std гораздо проще,
    чем добавлять его чуть ли не к каждой инструкции
    .
    Касательно ВКЛ/ВЫКЛ/ВКЛ нэймспэйсов дефайнов и прочего - хотим реально что то поубивать ниже листинги
    yvals.h
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    
    /* yvals.h values header for Microsoft C/C++ */
    #ifndef _YVALS
    #define _YVALS
    #include <use_ansi.h>
     
    /* Define _CRTIMP */
    #ifndef _CRTIMP
    #ifdef  _DLL
    #define _CRTIMP __declspec(dllimport)
    #else   /* ndef _DLL */
    #define _CRTIMP
    #endif  /* _DLL */
    #endif  /* _CRTIMP */
     
    #ifdef  _MSC_VER
    #pragma pack(push,8)
    #endif  /* _MSC_VER */
     
     #pragma warning(4: 4018 4114 4146 4244 4245)
     #pragma warning(4: 4663 4664 4665)
     #pragma warning(disable: 4237 4284 4290 4514)
            /* NAMESPACE */
     #if defined(__cplusplus)
      #define _STD          std::
      #define _STD_BEGIN    namespace std {
      #define _STD_END      };
      #define _STD_USING
     #else
      #define _STD          ::
      #define _STD_BEGIN
      #define _STD_END
     #endif /* __cplusplus */
    _STD_BEGIN
            /* TYPE bool */
     #if defined(__cplusplus)
    typedef bool _Bool;
     #endif /* __cplusplus */
            /* INTEGER PROPERTIES */
    #define _MAX_EXP_DIG    8   /* for parsing numerics */
    #define _MAX_INT_DIG    32
    #define _MAX_SIG_DIG    36
            /* STDIO PROPERTIES */
    #define _Filet _iobuf
     
    #ifndef _FPOS_T_DEFINED
    #define _FPOSOFF(fp)    ((long)(fp))
    #endif /* _FPOS_T_DEFINED */
     
            /* NAMING PROPERTIES */
     #if defined(__cplusplus)
      #define _C_LIB_DECL extern "C" {
      #define _END_C_LIB_DECL }
     #else
      #define _C_LIB_DECL
      #define _END_C_LIB_DECL
     #endif /* __cplusplus */
    #define _CDECL
            // CLASS _Lockit
     #if defined(__cplusplus)
    class _CRTIMP _Lockit
        {   // lock while object in existence
    public:
      #ifdef _MT
       #define _LOCKIT(x)   lockit x
        _Lockit();
        ~_Lockit();
      #else
       #define _LOCKIT(x)
        _Lockit()
            {}
        ~_Lockit()
            {}
      #endif /* _MT */
        };
     #endif /* __cplusplus */
            /* MISCELLANEOUS MACROS */
    #define _L(c)   L##c
    #define _Mbstinit(x)    mbstate_t x = {0}
    #define _MAX    _cpp_max
    #define _MIN    _cpp_min
    _STD_END
    #ifdef  _MSC_VER
    #pragma pack(pop)
    #endif  /* _MSC_VER */
     
    #endif /* _YVALS */
     
    /*
     * Copyright (c) 1996 by P.J. Plauger.  ALL RIGHTS RESERVED. 
     * Consult your license regarding permissions and restrictions.
     */
    и
    use_ansi.h
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    
    /***
    *use_ansi.h - pragmas for ANSI Standard C++ libraries
    *
    *   Copyright (c) 1996-1997, Microsoft Corporation. All rights reserved.
    *
    *Purpose:
    *       This header is intended to force the use of the appropriate ANSI
    *       Standard C++ libraries whenever it is included.
    *
    *       [Public]
    *
    ****/
     
     
    #if     _MSC_VER > 1000 /*IFSTRIP=IGN*/
    #pragma once
    #endif
     
    #ifndef _USE_ANSI_CPP
    #define _USE_ANSI_CPP
     
    #ifdef _MT
    #ifdef _DLL
    #ifdef _DEBUG
    #pragma comment(lib,"msvcprtd")
    #else   // _DEBUG
    #pragma comment(lib,"msvcprt")
    #endif  // _DEBUG
     
    #else   // _DLL
    #ifdef _DEBUG
    #pragma comment(lib,"libcpmtd")
    #else   // _DEBUG
    #pragma comment(lib,"libcpmt")
    #endif  // _DEBUG
    #endif  // _DLL
     
    #else   // _MT
    #ifdef _DEBUG
    #pragma comment(lib,"libcpd")
    #else   // _DEBUG
    #pragma comment(lib,"libcp")
    #endif  // _DEBUG
    #endif
     
    #endif  // _USE_ANSI_CPP

    Меняем содержимое этих файлов и соответсвующим образом переобъявляем ключевые константы и получаем то что желаем.

    Честно продолжать дискуссию в данной теме мне надоело, кто хочет пусть по прежнему ставит std:: (если есть желание увеличивать длинну кода и делать его трудновоспринимаемым). Писать код с using namespace std; ничем не хуже, при этом он будет компактен и лучше восприниматься тому кто его читает.
    Запись от -=ЮрА=- размещена 26.07.2012 в 10:39 -=ЮрА=- вне форума
  7. Старый комментарий
    Аватар для vxg
    никто не спорит про уменьшение количества нажатия клавиш. однако как справедливо заметил ForEveR ни в коем случае нельзя тащить конструкцию using namespace std; в заголовочные файлы и никакие аргументы в оправдание такого вандализма тут не помогут. впрочем, если вы хотите долго и нудно править все файлы зависящие от подобного зачумленного заголовка - дерзайте. внутренний голос подсказывает, что этот "чудо"-заголовок будет как панацея распихан по всему проекту в виде "лекарства" от назойливого std:: - поэтому при коллизии придется много пить)
    Запись от vxg размещена 26.07.2012 в 11:04 vxg вне форума
  8. Старый комментарий
    Аватар для -=ЮрА=-
    Начинали за здравие, а кончили за упокой. Вобщем давайте будем читать весь блог а потом писать что я предлагаю и чего я не предлагаю!Где чёрт возьми я хоть слова сказал "люди добрые пишите везеде в хедерах using namespace std"! Меня уже это доводит до ручки - пришли в тему, читайте её от её начала до её конца, а потом указывайте на якобы мои ошибки!

    Суть всего сводилась к нескольким аспектам
    1 - мы пишем простую "хелловордину" по типу ввод вывод и всё и лепим в неё std:: - это БРЕД БРЕД БРЕД!Лучше записать вначале using naespace std для сокращения кода, а далее оперировать простыми cin cout string и т.д.

    2 - мы подросли и начали писать нэймспейсами причём хотим быть уверенным что наша функция будет жеваться при любых раскладах(т.е через 1000-чу лет когда все названия функций будут исчерпаны авторы С++ начнут придумывать имена функций сходные с нашими - т.е. у нас в нэймспейсе есть функция веник и будет существовать std::веник и нам надо использовать обе функцииОпять же пишем namespace std вначале основного модуля а нашу функцию используем через наш_спейс::веник, это показал здесь https://www.cyberforum.ru/blog... omment1383

    3-е мы вообще хотим как бы отключить либо функцию стандартной библиотеки либо кроме отключить - заменить её полностью на нашу до конца программы. В этом случае можем использовать те примочки с дефайнами которые поданы мной начиная с этого поста https://www.cyberforum.ru/blog... omment3102
    и кончаяя этим https://www.cyberforum.ru/blog... omment3180
    Или можно вообще без дефайнов как приведено простым примером по этой ссылкеhttp://codepad.org/h8Wyz2oN -

    Что ещё модет быть не ясно???
    Запись от -=ЮрА=- размещена 26.07.2012 в 14:42 -=ЮрА=- вне форума
  9. Старый комментарий
    Аватар для vxg

    Не по теме:

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


    что не ясно: для чего вообще озвучивать очевидные вещи под видом божественного откровения? тем более в форме религиозной войны? если ваш код мал и построен преимущественно на std - используйте using namespace std. если построен на second_std - используйте using namespace second_std. однако если вы вставите в свой код участок из стороннего файла оперирующего с third_std, но не содержащий third_std:: задача уйдет в космос. поиском и заменой это дело не разрешить - придется только выносить эту часть кода в отдельный модуль в самом верху которого будет записано using namespace third_std множа заголовочные файлы и раздувая проект. в идеале префикс пространства имен не должен использоваться только внутри пространства имен. во всех других случаях *о Боже, мы станем роботами-графоманами* использование префиксов логически обосновано. исключениями могут быть припадки лени, короткий код, компактные обособленные участки кода.
    Запись от vxg размещена 26.07.2012 в 15:18 vxg вне форума
  10. Старый комментарий
    Аватар для -=ЮрА=-
    vxg , вобщем я так понимаю мне нужно показать в коде скажем 3 нєймспейса с директивами using i-ый спейс::одинаковая функция и тогда все вопросы отпадут?Плюс дать возможность программисту свичить по желанию отработку одинаковая функция то по схеме и 1-го неймспейса, то второго, то 3-го, и чтоб всегда можно было какую угодно одинаковая функция использовать, ну так да???Ну что ж я плохой мальчик - поэтому попрошу опровергнуть вот эту небольшую горку кода
    http://codepad.org/aiodK0K3 <- Да это ВКЛ/ВЫКЛ/ВКЛ спейсов

    Не по теме:

    в принципе это равносильно этому коду

    можно и не смотреть


    но концепт то был using спэйс::его функция причём в одном коде using для разных спейсов (кстати кто мешает мне между {} в case написать кучу кода именно с функциями из конкретно взятого спейса без всяких, простите за грубость, дурацких перестраховок спейс:: ????
    Запись от -=ЮрА=- размещена 26.07.2012 в 20:52 -=ЮрА=- вне форума
  11. Старый комментарий
    Аватар для vxg
    вы привели вполне рабочий пример, в чем вопрос или ответ или посыл не пойму? что опровергать? да, так можно сделать. точно так же как можно сделать using namespace one. однако вы не сможете вызвать приведенным способом две одноименные функции из разных пространств имен "одновременно". поэтому методически это - более слабая стилистика.
    Запись от vxg размещена 27.07.2012 в 13:54 vxg вне форума
  12. Старый комментарий
    Аватар для -=ЮрА=-
    да, так можно сделать. точно так же как можно сделать using namespace one. однако вы не сможете вызвать приведенным способом две одноименные функции из разных пространств имен "одновременно".
    Вызвать одновременно можно в параллельных процессах, в программе же можно вызвать последовательно, я показал как сделать вызов в программе полностью не перегружаемых функций, если же они перегружаемы то записали
    using namespace one;
    using namespace two;
    и т.д.
    и не морочим мне а главное себе голову. Можно спорить хоть до нового пришествия, могу сказать только одно если кто-то не умеет то придумывает себе непреодолимые преграды и это не мои проблеммы, а проблеммы данного программистаКасательно проблем - предпочитаю их либо не создавать либо если уж и решать то именно так как мне надо(и повозможности попроще да и попонятней для тех кто будет работать с моим кодом), а не так как все привыкли!Надеюсь понятно к чему всё сводится...

    Не по теме:

    От себя:Если кто-то способен привсти код, который не смогу поправить - полностью или почти полностью изъяв из него space:: я готов принять так сказать вызов и даже потом привселюдно отречся от своих убеждений. Только вот если решу (в чём абсолютно не сомневаюсь), потом не надо писать, что мол снова не совсем так сделал или методически можно и так но как было лучше и прочее(буст пожалуйста не цеплять)...ЖДУ!

    Запись от -=ЮрА=- размещена 27.07.2012 в 20:37 -=ЮрА=- вне форума
  13. Старый комментарий
    Аватар для -=ЮрА=-
    Чтобы было это понятно
    если же они перегружаемы то записали
    using namespace one;
    using namespace two;
    прошу сюда http://codepad.org/yaj5NQeG
    Запись от -=ЮрА=- размещена 27.07.2012 в 21:13 -=ЮрА=- вне форума
  14. Старый комментарий
    Аватар для grizlik78
    Цитата Сообщение от -=ЮрА=-
    Чтобы было это понятно
    прошу сюда http://codepad.org/yaj5NQeG
    Юра! Между прочим, это замечательный пример, как использование using затрудняет чтение программы, из-за отсутствия префиксов. Когда читатель в одном месте программы встречает fun(5), а в другом fun(5.0) он может и не догадаться, что это совершенно разные функции из ничего общего не имеющих библиотек. Если же вызовы осуществляются через one::fun(5) и two::fun(5.0), то тут ошибку совершить сложнее и читателю, и, между прочим, писателю, который мог упустить из виду неправильный тип аргумента.
    Вызывая one::fun(5.0) и two::fun(5) будут вызваны именно те функции, которые хотел программист. Если префиксов не будет, то функции перепутаются.
    Запись от grizlik78 размещена 27.07.2012 в 21:22 grizlik78 вне форума
  15. Старый комментарий
    Аватар для -=ЮрА=-
    grizlik78 я уже показал здесь как можно вызывать именно с конкретным указанием спейса
    https://www.cyberforum.ru/blog... omment3234 (именно этот код http://codepad.org/aiodK0K3)

    Если префиксов не будет, то функции перепутаются.
    Ну вот для кого они перепутаются тому 100% сложно будет что либо вообще в проекте поправить, по симу человеку луше и не догадываться что функции из разных спейсов. Кстати любой начинающий знает о Go to Definition в контекстном меню и окно с 2-5-ю прототипами уже говорит что функция перегружена. А если эти функции в одном спейсе, то код
    C++
    1
    2
    
    one::fun(5);
    one::fun(5.0);
    будет понятней???Смешно просто!
    Запись от -=ЮрА=- размещена 27.07.2012 в 21:53 -=ЮрА=- вне форума
  16. Старый комментарий
    Аватар для grizlik78
    Функции с одним именем и из одного нэймспейса делают, обычно одно и то же. А разные пространства имён возникают обычно, когда подключаются несколько библиотек. И прототипов при этом не видно, так как они расположены в объёмных заголовочных файлах.

    Вот тебе сценарий, вполне жизненный.
    Написали мы программу, в которой используется функция с прототипом
    C++
    1
    
    double fun(double);
    В самой программе тысячи строк и где-то среди них есть вызов fun(5). Здесь всё отлажено и всё работает. Компилятор никаких предупреждений не даёт, ведь неявное преобразование из int в double это вполне нормально.
    Далее, приходит время добавить программе какой-то ещё функционал, для чего подключается библиотека с заголовком someheader.h. Да вот беда, в том заголовке есть функция с прототипом
    C++
    1
    
    int fun(int);
    А через месяц вдруг обнаруживается, что то, что исправно работало, даёт какие-то странные результаты.
    И вот поди, разберись из-за чего.
    Когда ты найдёшь причину, ты самолично захочешь задушить того, кто поленился использовать префиксы и написал using namespace.
    Запись от grizlik78 размещена 27.07.2012 в 22:05 grizlik78 вне форума
  17. Старый комментарий
    Аватар для -=ЮрА=-
    grizlik78, какие к чёрту проблемы?Контрлируй типы переменных как этого требует новый стандарт и всё будет рабоать как надо!Почему то все спешать поставить в pow(2.0,2.0) точку с ноликом а тут мы вдруг забываем. Вот тебе код http://codepad.org/diGwvncw - ещё скажи что он снова некашерный

    Не по теме:

    Или у тебя в кодах идёт вот такое int p = 5.6/3.2 - гы чувак так тогда прости это понижение типа и т.д. в таких случаях программист сам виноват а не несчастный using namespace!:)

    Запись от -=ЮрА=- размещена 27.07.2012 в 22:33 -=ЮрА=- вне форума
  18. Старый комментарий
    Аватар для grizlik78
    Мне хочется верить, что ты пишешь идеальные программы и не совершаешь ошибок, но не могу. Не верится. Остаётся только пожелать тебе вляпаться в эту самую несуществующую проблему по самые помидоры.
    Собственно я и писал-то это всё не для тебя, а для тех, кто может захотеть к тебе прислушаться.
    В использовании using namespace в маленьких программах и модулях, где легко проконтролировать все аспекты, нет ничего криминального и это действительно может быть удобно. Но твой совет везде использовать using namespace std — это совет из разряда вредных.

    А то, что тебе труднее читать программы с префиксами — это только твоя проблема. Неправильно пытаться решить её за счёт создания проблем другим. Да, тех самых проблем, которых для тебя не существует.
    Запись от grizlik78 размещена 27.07.2012 в 22:45 grizlik78 вне форума
  19. Старый комментарий
    Аватар для vxg
    Цитата Сообщение от -=ЮрА=-
    ещё скажи что он снова некашерный
    да, именно так, причем я рассчитывал на проповедь вида "эта ситуация маловероятна", а тут вы сами себе одно вокруг другого обмотали) вот есть у меня в пространстве one класс vector и в пространстве two класс vector. и нужно мне "одновременно" (обратите внимание на кавычки, здесь подразумевалось значение "в компактном участке кода, практически в одном месте программы, в соседних строках и т.п.") оперировать с этими классами. как? использовать кучу using и гору фигурных скобок для создания формальных блоков кода не нужных ни для чего кроме как обеспечения работы этих самых using? выглядит как уродство. а если мы еще умудримся затолкать обращения к этим двум классам в одну строку то вообще using отдыхает. причем не нужно говорить что это "ламерье" писало раз так получилось - ситуация достаточно типовая когда люди исчерпав свою фантазию и словарный запас употребляют такие фундаментальные слова как vector для обзывания своих абстракций.
    Запись от vxg размещена 27.07.2012 в 22:52 vxg вне форума
  20. Старый комментарий
    Аватар для -=ЮрА=-
    vxg приведу один простой пример, пускай не совсем с нэймспейсом, а с временными объектами скажем CDialog(это базовый клас в MFC кто не знает), но сути это не меняет. Так вот в коде к примеру нам нужно поставить надпись на тайтле окна "Привет мир" это можно сделать двумя путями CDialog::SetWindowText("Привет мир"); а можно просто SetWindowText("Привет мир"); и не создавать временный объект. Так вот я не против если в коде из 150 строк будет одна строка вида space::function(class) и т.д. но когда в коде из 150 строк каждая строка содержит по 1-му или даже несколько расширений видимости - мне такому програмисту хочется отрубать руки (без обид). Теперь давай разберёмся на счёт тех же векторов - создай переменную член-класса 1-го вектора и зогини её в конструктор копирования второго вектора и делай это во временной области (данное финтифлю удобно когда далее по коду строк 80 будем использовать именно второй вектор и на 80-й строке получим какой-то результат - вот тот результат запихивай в первый вектор (уже за скобками) и не мучайся.
    Мне просто не понятно уже и отрывки из умных книг привёл и кучу примеров и всё равно как горохом об стену - мне вот эта дискусия напоминает средневековье, когда инквизиция диктовала свои условия и лишь единицы видя истину до последнего стояли на своём (скажем тот же Галилей), вот так и здесь ВЫ ПРОСТО ПРИВЫКЛИ ПИСАТЬ спейс:: и нагромождать код ненужным и всё.
    Теперь подведу небольшой итог из последних двух постов причём буду не свои фразі использовать а тек которые прозвучали в ответах
    В использовании using namespace в маленьких программах и модулях, где легко проконтролировать все аспекты, нет ничего криминального и это действительно может быть удобно.
    - Я об этом говорил и тот кто так не делает просто "мазохист" (других слов не нашлось)
    ситуация достаточно типовая когда люди исчерпав свою фантазию и словарный запас употребляют такие фундаментальные слова как vector для обзывания своих абстракций.
    - пусть пишут если выов второго класса нужен в 2-х 3-х строка я не против ставьте спейс:: если больше, то никаких у вас обоснований нагромождать код двоеточечням хламом я не вижу!И скорее это как раз таки делают люди исчерпавшие свое CPU в башке и плывущие по течнию ("а что ведь так все вроди делают, давай и я пойду спрыгну с 7-го этажа")
    Далее - я надеюсь вот эти посты дали исчерпывающий ответ на счёт функций и их перегррузке и перекрёстном использовании
    начало https://www.cyberforum.ru/blog... omment3259
    конец https://www.cyberforum.ru/blog... omment3263

    В заключении скажу - тот кто портирует в свой проект чужой код, по крайней мере должен хотябы знать функционал вводимого в проект неймспейса(а вдруг он кроме а + b код вводимого спейса при линковке будет логиниться на серваке пентагона и начнет 3-ю мировую) и мне допустим как рзарботчику сразу будут видны скользкие места по перекрёсному использованию - УВЕРЯЮ за чашкой крепкого кофе подкорректирую проект так что даже и space:: ставить нигде не прийдётся, а не буду громоздить код с двоеточиями в которых порой даже самому сложно разбираться, потому как за ними не видно сути - а ведь прозрачность кода это основы программирования(чуть ли не школа программирования)
    Вобщем ребята, не убедили вы меня, скорее уже сами по тихоньку в ходе дискуссиии начинаете подтверждать мои слова...
    Запись от -=ЮрА=- размещена 28.07.2012 в 11:36 -=ЮрА=- вне форума
 
Новые блоги и статьи
Программа опроса у.з. расходомера 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 (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru