В С++ можно ли использовать объявление using namespace std;
в файлах реализации функции?
Использование пространства имен в реализации функции
Ответ 1
Под "файлами реализации функций" вы подразумеваете файлы .h или .cpp? (Обычно я называю файлы .cpp файлами "реализации", а файлы .h - файлами "интерфейса".)
Если вы имеете в виду .cpp файлы, то конечно. Вот где вы обычно видите using namespace std
. Это означает, что весь код в этом файле .cpp имеет доступ к std
без квалификации.
Если вы имеете в виду файлы .h, то можете, но не должны. Если вы включите его в файл .h, он будет автоматически применяться к любому файлу .cpp, который содержит файл .h, который может содержать много файлов. Как правило, вы не хотите сообщать другим модулям, какие пространства имен импортировать. Лучше всего поместить его в каждый файл .cpp, а не в обычный файл .h.
Редактировать: Пользователь @lachy предложил редактирование, которое я не буду включать дословно, но они предложили мне указать, что using namespace std
обычно считается плохой практикой из-за загрязнения пространства имен. Они дали ссылку на вопрос по этой теме: Почему " использует пространство имен std; " считается плохой практикой?
Ответ 2
Возможно, вам также хотелось бы знать, что вы можете положить using namespace std;
внутри тела функции, как показано ниже. Это ограничит область действия оператора using namespace
.
void f() {
using namespace std;
cout << "Foo" << endl;
//..
};
void g() {
cout << "Bar" << endl; //ERROR: cout and endl are not declared in this scope.
};
Это может быть полезно, если вы хотите использовать множество элементов пространства имен в теле функции, которая написана в заголовочном файле (который вы не должны сами по себе, но иногда это нормально или даже почти необходимо (например, шаблоны)).
Ответ 3
Я предполагаю, что вы имеете в виду что-то вроде этого:
// Foo.h
void SayHello();
...
// Foo.cpp
#include "Foo.h"
using namespace std;
void SayHello()
{
cout << "Hello, world!" << endl;
}
Если это так, то да. Тем не менее, он считал, что плохая практика использует using namespace std;
в более крупных проектах.
Ответ 4
Если по "файлам реализации функции" вы имеете в виду файлы .C/.cpp и т.д., вы можете, однако, попытаться избежать. Вместо этого вводите только то, что вам нужно, например, если вам нужно <iostream>
для std::cout
, std::endl
и т.д., Просто введите эти два, using std::cout;
и using std::endl;
, теперь вы можете просто написать cout
и endl
.