Информация об изменениях

Сообщение Re: using namespace std; от 18.09.2019 5:42

Изменено 18.09.2019 5:53 rg45

Re: using namespace std;
Здравствуйте, _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;
    // . . .
}


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

namespace fbbq = foo::bar::baz::qux;
Re: using namespace std;
Здравствуйте, _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;