using namespace std;
От: _NN_ www.nemerleweb.com
Дата: 18.09.19 04:15
Оценка: 4 (2) +3
После того как в очередной раз сломали код из-за добавления новых символов в std , как std::predicate, моё терпение лопнуло.
Пространство имён std не резиновые.

В общем я теперь агитирую только using std::something или явное std::something.

Есть ещё кто пишет using namespace std ?

https://en.cppreference.com/w/cpp/concepts/predicate
http://rsdn.nemerleweb.com
http://nemerleweb.com
Отредактировано 18.09.2019 4:25 _NN_ . Предыдущая версия .
Re: using namespace std;
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 18.09.19 04:37
Оценка: 3 (1) +12
Здравствуйте, _NN_, Вы писали:

_NN>Есть ещё кто пишет using namespace std ?


_NN>https://en.cppreference.com/w/cpp/concepts/predicate


Я много лет за такое по рукам бил, особенно, если кто-то додумывался учудить подобное в заголовочном файле. Привести в чувства проект с горой "using namespace std" то еще веселье
Re: using namespace std;
От: RonWilson Россия  
Дата: 18.09.19 04:42
Оценка: +2
Здравствуйте, _NN_, Вы писали:

_NN>В общем я теперь агитирую только using std::something или явное std::something.


+1

_NN>Есть ещё кто пишет using namespace std ?



давно такого не видел, разве что в интернетах, но по глазам сразу такое бьет, противно смотреть
Re[2]: using namespace std;
От: Михaил  
Дата: 18.09.19 05:03
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Здравствуйте, _NN_, Вы писали:


_NN>>Есть ещё кто пишет using namespace std ?


_NN>>https://en.cppreference.com/w/cpp/concepts/predicate


KP>Я много лет за такое по рукам бил, особенно, если кто-то додумывался учудить подобное в заголовочном файле. Привести в чувства проект с горой "using namespace std" то еще веселье


А изза чего начинаются проблемы? В заголовочных вред using понимаю, но чем он плох в cpp?
Re[3]: using namespace std;
От: _NN_ www.nemerleweb.com
Дата: 18.09.19 05:25
Оценка: +3
М>А изза чего начинаются проблемы? В заголовочных вред using понимаю, но чем он плох в cpp?

Проблема из-за того, что с каждым новым стандартом в пространство имён добавляют всё больше и больше символов, тем самым увеличивая риск пересечения локальных имён.
Вот у нас был predicate, с новым стандартом появился std::predicate и код перестал собираться.
И это не первый раз, а дальше будет только хуже
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: using namespace std;
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 18.09.19 05:33
Оценка: 3 (1) +6
Здравствуйте, Михaил, Вы писали:

KP>>Я много лет за такое по рукам бил, особенно, если кто-то додумывался учудить подобное в заголовочном файле. Привести в чувства проект с горой "using namespace std" то еще веселье


М>А изза чего начинаются проблемы? В заголовочных вред using понимаю, но чем он плох в cpp?


А там начинается веселье уровня "откуда ты сказал". Конфликт имен и начинают подставляться вызовы функций, которые ты не ожидаешь. Вот крайне показательный пример.

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

namespace fs = boost::filesystem;
Отредактировано 18.09.2019 5:48 kaa.python . Предыдущая версия . Еще …
Отредактировано 18.09.2019 5:47 kaa.python . Предыдущая версия .
Re: using namespace std;
От: rg45 СССР  
Дата: 18.09.19 05:42
Оценка: 2 (1)
Здравствуйте, _NN_, Вы писали:

_NN>После того как в очередной раз сломали код из-за добавления новых символов в std , как std::predicate, моё терпение лопнуло.

_NN>Пространство имён std не резиновые.

_NN>В общем я теперь агитирую только using std::something или явное std::something.


ИМХО, это в равной степени относится и к другим пространствам имен, не только к std. Using directives (не путать с using declarations) если и могут применяться, то скорее как исключение из правил.

В моей практике можно выделить пожалуй единственный случай, когда я позволяю себе использовать using директиву — это когда какой-нибудь отдлельный юнит тест требует определения каких-то дополнительных специфических сущностей. Вот тогда я создаю в cpp файле, в анонимном пространстве имен дополнительный namespase с таким же именем как функция-член. И после этого использую using директиву внутри одной отдельно взятой функции, даже не во всем cpp файле. То есть такое пространство имен логически можно расссматривать как некое расширение функции-члена:

//SomeTestSuite.cpp

namsespace
{
namsespace TestSomethingTricky
{
// . . .
} // namespace TestSomethingTricky
} // namespace

void SomeTestSuite::TestSomethingTricky()
{
    using namespace TestSomethingTricky;
    // . . .
}


Во всех остальных случаях либо using declarations, либо полная квалификация имен с пространствами при использовании.

Могут также оказаться полезными алиасы пространст имен:

namespace fbbq = foo::bar::baz::qux;
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 18.09.2019 6:10 rg45 . Предыдущая версия . Еще …
Отредактировано 18.09.2019 5:53 rg45 . Предыдущая версия .
Отредактировано 18.09.2019 5:45 rg45 . Предыдущая версия .
Re: using namespace std;
От: niXman Ниоткуда https://github.com/niXman
Дата: 18.09.19 06:02
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>После того как в очередной раз сломали код из-за добавления новых символов в std , как std::predicate, моё терпение лопнуло.


т.е. ранее ты сам определил predicate в std?

_NN>Есть ещё кто пишет using namespace std ?


только в хелловордах =)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[2]: using namespace std;
От: rg45 СССР  
Дата: 18.09.19 06:07
Оценка: +4
Здравствуйте, niXman, Вы писали:


_NN>>После того как в очередной раз сломали код из-за добавления новых символов в std , как std::predicate, моё терпение лопнуло.


X>т.е. ранее ты сам определил predicate в std?


Да почему в std-то? В том пространстве имен, где использовалась using директива же.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[3]: using namespace std;
От: niXman Ниоткуда https://github.com/niXman
Дата: 18.09.19 06:08
Оценка:
Здравствуйте, rg45, Вы писали:

R>Да почему в std-то? В том пространстве имен, где использовалась using директива же.


понял)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[3]: using namespace std;
От: rg45 СССР  
Дата: 18.09.19 06:17
Оценка: 6 (1) +1
Здравствуйте, Михaил, Вы писали:

KP>>Я много лет за такое по рукам бил, особенно, если кто-то додумывался учудить подобное в заголовочном файле. Привести в чувства проект с горой "using namespace std" то еще веселье


М>А изза чего начинаются проблемы? В заголовочных вред using понимаю, но чем он плох в cpp?


Неприятности могут быть разные. Самое простое — это ошибки компиляции из-за конфликта имен. Но это пол беды, поскольку это не пройдет незамеченным. Гораздо хуже, когда в ADL, вдруг начинает выигрывать совсем не та функция, на которую ты рассчитываешь. Особенно это актуально для функций операторов (сравнения, арифметических, ввода-вывода и пр.). В этом случае компилятор уже не поможет и ты долго и нудно можешь искать причину, по которой программа работает не так, как нужно. Ну и, пожалуй, главная проблема в том, что то, что сегодня нормально работает, завтра может поломаться в результате безобидных, на первый взгляд, изменений в другом пространстве имен. Избыточная связность кода — вот, что плохо.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 18.09.2019 6:42 rg45 . Предыдущая версия . Еще …
Отредактировано 18.09.2019 6:24 rg45 . Предыдущая версия .
Отредактировано 18.09.2019 6:20 rg45 . Предыдущая версия .
Отредактировано 18.09.2019 6:18 rg45 . Предыдущая версия .
Re: using namespace std;
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 18.09.19 06:34
Оценка:
Здравствуйте, _NN_, Вы писали:


_NN>Есть ещё кто пишет using namespace std ?



Никогда так не делал и не планирую
Маньяк Робокряк колесит по городу
Re: using namespace std;
От: lpd Черногория  
Дата: 18.09.19 08:42
Оценка: :)
Здравствуйте, _NN_, Вы писали:

_NN>После того как в очередной раз сломали код из-за добавления новых символов в std , как std::predicate, моё терпение лопнуло.

_NN>Пространство имён std не резиновые.

Мне на С бы ваши С++ проблемы

_NN>В общем я теперь агитирую только using std::something или явное std::something.


_NN>Есть ещё кто пишет using namespace std ?


Если у проекта Super Application аббревиатура SA, то я называл свои классы не predicate, а SAPredicate, и о проблемах пересечения namespace узнал из этого топика. Но вы можете продолжать дуть щеки от того, что ваш код пестрит ::, <> и &&. Чем сложнее код, тем сильнее программист, воистину.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Re: using namespace std;
От: SaZ  
Дата: 18.09.19 08:42
Оценка: +1
Здравствуйте, _NN_, Вы писали:

_NN>После того как в очередной раз сломали код из-за добавления новых символов в std , как std::predicate, моё терпение лопнуло.

_NN>Пространство имён std не резиновые.

_NN>В общем я теперь агитирую только using std::something или явное std::something.


_NN>Есть ещё кто пишет using namespace std ?


_NN>https://en.cppreference.com/w/cpp/concepts/predicate


Максимум, делаю using в локальной области видимости (не больше, чем функция). Например, если дофига работы с временем, то внутри метода можно сразу развернуть chrono.
Re[2]: using namespace std;
От: Mr.Delphist  
Дата: 18.09.19 09:47
Оценка: +2
Здравствуйте, lpd, Вы писали:

lpd>Если у проекта Super Application аббревиатура SA, то я называл свои классы не predicate, а SAPredicate, и о проблемах пересечения namespace узнал из этого топика. Но вы можете продолжать дуть щеки от того, что ваш код пестрит ::, <> и &&. Чем сложнее код, тем сильнее программист, воистину.


А затем код вытаскивается в shared library, и опа! Что такое SA? Почему? Зачем? Да и авторам Silver Application тоже грозит name clash с этим Super Application.

Из наиболее известных ляпов такого рода — Apple со своими префиксами NS (Next Step). Проект Next Step давно неактуален, но "ложечки остались". Новые API не используют NS-префикс, и теперь у Apple SDK очень полосатый naming convention.
Отредактировано 18.09.2019 12:44 Mr.Delphist . Предыдущая версия .
Re: using namespace std;
От: TimurSPB Интернет  
Дата: 18.09.19 09:53
Оценка: -1
_NN>После того как в очередной раз сломали код из-за добавления новых символов в std , как std::predicate, моё терпение лопнуло.
clang тоже не одобряет.


https://wiki.sei.cmu.edu/confluence/display/cplusplus/DCL58-CPP.+Do+not+modify+the+standard+namespaces — хорошие пояснения по теме.
Make flame.politics Great Again!
Re[2]: using namespace std;
От: _NN_ www.nemerleweb.com
Дата: 18.09.19 10:35
Оценка:
Здравствуйте, TimurSPB, Вы писали:

_NN>>После того как в очередной раз сломали код из-за добавления новых символов в std , как std::predicate, моё терпение лопнуло.

TSP>clang тоже не одобряет.
Так не я же добавил predicate в std, а стандарт
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: using namespace std;
От: Ops Россия  
Дата: 18.09.19 11:22
Оценка:
Здравствуйте, niXman, Вы писали:

_NN>>Есть ещё кто пишет using namespace std ?


X>только в хелловордах =)


Так новички по ним и учатся
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re: using namespace std;
От: Vamp Россия  
Дата: 18.09.19 12:00
Оценка: +1 :))
.

_NN>Есть ещё кто пишет using namespace std ?


Нет, мы так не делаем. А еще мы моем руки перед едой и чистим зубы.

Ну что за детсад, ей-богу? 20 лет везде пишут, что using namespace std в namespace scope — зло. И вдруг в конце 2019 года внезапно приходит осознать что таки "папа был прав".
Да здравствует мыло душистое и веревка пушистая.
Re: using namespace std;
От: andyp  
Дата: 18.09.19 13:36
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>В общем я теперь агитирую только using std::something или явное std::something.

_NN>Есть ещё кто пишет using namespace std ?

Древнее зло.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.