Мені казали, що писати using namespace std;
в коді неправильно, і що я повинен використовувати безпосередньо std::cout
і std::cin
.
Чому використання простору імен std;вважається поганою практикою? Це неефективно чи є ризик оголошення неоднозначних змінних (змінних, що мають однакове ім'я з функцією в просторі імен
std`)? Чи впливає це на продуктивність?
Це взагалі не пов'язано з продуктивністю. Але подумайте ось про що: ви використовуєте дві бібліотеки, які називаються Foo і Bar:
using namespace foo;
using namespace bar;
Все працює чудово, і ви можете без проблем викликати Blah()
з Foo і Quux()
з Bar. Але одного разу ви переходите на нову версію Foo 2.0, яка тепер пропонує функцію під назвою Quux()
. Тепер у вас виник конфлікт: І Foo 2.0, і Bar імпортують Quux()
у ваш глобальний простір імен. Це потребує певних зусиль для виправлення, особливо якщо параметри функцій збігаються.
Якби ви використовували foo::Blah()
і bar::Quux()
, то введення foo::Quux()
не було б проблемою.
Ще одна причина - несподіванка.
Якщо я бачу cout << blah
, замість std::cout << blah
, я думаю: що це за cout
? Це звичайний cout
? Чи це щось особливе?
Вся справа в управлінні складністю. Використання простору імен буде тягнути за собою речі, які вам не потрібні, і таким чином, можливо, ускладнить налагодження (я кажу "можливо"). Використання std:: повсюдно ускладнює читання (більше тексту і все таке).
Коні для курсів - керуйте своєю складністю так, як ви найкраще можете і відчуваєте себе здатним.