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

Где поставить с использованием пространства имен std;

Мне интересно, куда положить using namespace std;. Я видел код с using namespace std; в int main(){}, но я помещал его после #include <iostream>. Где я должен это поставить и не имеет значения, где я его положил?

4b9b3361

Ответ 1

Это имеет огромное значение, когда вы его кладете.

Если вы поместили его внутри функции, то он применим только к этой функции.

Если вы помещаете его вне функции в глобальную область, то она применяется ко всему после этой точки.

Если вы помещаете его вне функции в глобальную область в файл заголовка, тогда он будет применяться даже к любому файлу, который включает этот заголовок.

Как правило, очень плохая практика использовать его в глобальной области видимости в заголовке и полуплостую практику, чтобы использовать его в глобальной области вообще, поскольку в Unity builds, различие между заголовками и исходными файлами размыто.

Лучше всего использовать его в тех функциях, которые вам нужны, или даже не использовать его вообще, и просто префикс стандартных библиотечных функций/классов с помощью std::.

Ответ 2

Добавление его внутри функции ограничивает область действия оператора using только этой функцией. Вы никогда не должны ставить оператор using внутри заголовка, чтобы избежать конфликтов для пользователей ваших файлов заголовков.

Поместить его выше основного в область файла отлично, если вы знаете, что конфликтов не возникнет, но даже это может вызвать проблемы с другими импортируемыми типами и, как правило, следует избегать в проектах с умеренным размером. Я стараюсь избегать загрязнения глобального пространства имен как можно больше, но если я пишу одноразовый небольшой файл реализации, я добавлю using namespace std; наверху для удобства.

В вашем случае, если вы хотите использовать только std::cout и std::cin (просто пример), вы можете сделать это:

using std::cout;
using std::cin;

Теперь вы можете писать cin >> whatever и cout << whatever без полного определения типа/объекта каждый раз, а также избегать загрязнения глобального пространства имен.

Ответ 4

Директива using ограничена, поэтому она будет действовать только в пределах области, в которой она появляется. Используйте его там, где он наиболее подходит для вашей ситуации.

Ответ 5

Если вам не нравится вводить std:: везде (я делаю, не могу получить достаточное количество двоеточий в моем коде!), лучше всего выборочно импортировать имена, которые вы хотите в область видимости следующим образом:

void some_function()
{
  using std::vector;

  vector<int> x;
  ...
}

Это нормально также для use выбранных имен в глобальной области.

Таким образом, вы не вытаскиваете ВСЕ имена из стандартной библиотеки в глобальное пространство имен.

Ответ 6

Он будет вносить все в std в область видимости, где бы вы ее не поместили. Если его в области файлов, он считается повсюду в файле, если его в функции он применяется только в функции - так что это зависит от того, что вы хотите. Лично мне не нравится объявлять using namespace std.

Ответ 7

Многие люди здесь скажут, что вы не должны использовать его вообще. Причиной этого могут быть конфликты, если вы случайно определите функцию, которая уже находится в пространстве имен std, для очень больших проектов это может быть трудно отследить. Для тривиальных программ это, честно говоря, не такая большая проблема, но там, где вы ее положили, есть разница.

В глобальном масштабе это применимо повсеместно. В локальной области (то есть только в main()), она будет применяться только в основном.

Вот некоторые альтернативы хорошие альтернативы

  • Поместите std:: before all i.e, std::cout << "Hello, World!" << std::endl;
  • Используйте только то, что вы хотите использовать внутри функции.

Пример использования только тех вещей, которые вы хотите в локальной функции:

int main()
{
   using std::cout;
   using std::endl;
   cout << "Hello, World!" << endl;
   return 0;
} // Obviously you need #include <iostream> at the top..