C++ 是否有可能恢复到“正常”状态;“违约”;全局名称空间?
基本上,我正在使用以下格式的一些提供的头文件:C++ 是否有可能恢复到“正常”状态;“违约”;全局名称空间?,c++,namespaces,using-directives,C++,Namespaces,Using Directives,基本上,我正在使用以下格式的一些提供的头文件: #include <iostream> using namespace std; class bar { public: void printSomething(void) { cout << "This is an example." << endl; } } #包括 使用名称空间std; 分类栏 { 公众: void打印某物(void) { cout您无法摆脱“使
#include <iostream>
using namespace std;
class bar
{
public:
void printSomething(void)
{
cout << "This is an example." << endl;
}
}
#包括
使用名称空间std;
分类栏
{
公众:
void打印某物(void)
{
cout您无法摆脱“使用名称空间”。您可以有多个“使用名称空间”语句,并且它们是相加的
但是,您可以将恶意标头包装到其自己的命名空间中:
namespace Crap
{
#include "maliciousHeader.h"
}
这样,“using namespace std”只适用于命名空间垃圾。我建议将上述代码放入另一个标头中,该标头是您实际包含在程序中的标头。您不能这样做。这就是为什么using namespace
子句非常有效的原因。您可以将这些标头包含在另一个命名空间中:
namespace bleh {
#include "library_that_uses_evul_using_namespace.h"
}
这只会污染bleh
名称空间。很好的建议是将名称空间中的标题沙箱化到另一个标题中。我想我会从现在开始这样做。请记住,如果标题旁边有一个cpp,它将不起作用,因为垃圾名称空间将成为链接器用于匹配声明的标识符的一部分d定义。只要可以,请更改损坏的头文件。在这方面,类声明基本上与名称空间类似,对吗?与Class spam{#include“evul.h”}
类似,只有spam才会具有由“evul.h”创建的受污染名称空间,并且全局名称空间保持不变?