Подтвердить что ты не робот

С++ с использованием ключевого слова

В чем разница между этими двумя использованиями ключевого слова using:

using boost::shared_ptr;

и

using namespace boost;
4b9b3361

Ответ 1

using boost::shared_ptr;

Включает только shared_ptr из пространства имен boost в вашем текущем пространстве имен. Это означает, что вы можете использовать shared_ptr, не отделяя его от пространства имен boost.

Он называется с использованием объявления.


using namespace boost;

Включает все символы в пространстве имен boost в вашей текущей области. Это означает, что вы можете использовать все символы в пространстве имен boost, не присваивая им пространство имен boost.

Он называется с использованием директивы.


Почему вы всегда предпочитаете using declaration над using directive?

Всегда лучше использовать первую (using declaration) и избегать второй (using directive), потому что вторая вызывает загрязнение пространства имен, внося потенциально огромное количество имен в текущую пространство имен, многие из которых не нужны. Наличие ненужных имен значительно увеличивает вероятность непредвиденных конфликтов имен.

Процитировать Herb Sutter по использованию using directive:

Я считаю полезным думать о using directive как о мародерстве армии сумасшедших варваров, которые сеют беспорядочное разрушение, где бы оно ни проходило, - то, что своим простым присутствием может вызвать unintended conflicts,, даже когда вы думаете, reiedied with it.

Ответ 2

  • using namespace boost делает все имена в пространстве имен boost видимыми без квалификации
  • using boost::shared_ptr просто делает shared_ptr видимым без квалификации.

Ответ 3

Первый называется using declaration;

Вторая называется using directive.

Цитата MSDN:

Обратите внимание на разницу между директивой using и использованием Объявление:

использование объявления позволяет указать индивидуальное имя используется без квалификации,

директива using позволяет всем именам в пространстве имен, которое будет использоваться без квалификации.

Ответ 4

Первый позволяет использовать имя shared_ptr без префикса boost::. Второй позволяет использовать любые и все имена в пространстве имен boost с префиксом boost::. Некоторые люди нахмурились, но это никогда не давало мне никаких проблем.