在C ++中,我可以在函数实现文件中使用using namespace std;
声明吗?
答案 0 :(得分:88)
也许您也想知道您可以将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.
};
如果你想在一个用头文件写的函数体中使用命名空间的很多元素,这很有用(你本身不应该这样,但有时它是好的,甚至几乎是必要的(例如模板))。
答案 1 :(得分:12)
“功能实现文件”是指.h文件还是.cpp文件? (我通常会将.cpp文件称为“实现”文件,而.h文件则是“接口”文件。)
如果你的意思是.cpp文件,那么当然。这是您通常看到using namespace std
的地方。这意味着此.cpp文件中的所有代码都可以无限制地访问std
。
如果您的意思是.h文件,那么您可以,但您不应该。如果将它包含在.h文件中,它将自动应用于包含.h文件的任何.cpp文件,该文件可能是很多文件。您通常不希望告诉其他模块要导入哪些名称空间。最好将它放在每个.cpp文件中,而不是放在一个普通的.h文件中。
答案 2 :(得分:7)
我假设你的意思是这样的:
// Foo.h
void SayHello();
...
// Foo.cpp
#include "Foo.h"
using namespace std;
void SayHello()
{
cout << "Hello, world!" << endl;
}
如果是这样,那么是的。但是,在较大的项目中使用using namespace std;
被认为是不好的做法。
答案 3 :(得分:4)
如果通过“函数实现文件”表示.C / .cpp等文件,则可以尝试避免。而只是注入您需要的内容,例如,如果<iostream>
,std::cout
需要std::endl
等,只需将这两个注入using std::cout;
和using std::endl;
,现在您只需撰写cout
和endl
。