В С++ можно ли использовать объявление 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.