Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否有可能恢复到“正常”状态;“违约”;全局名称空间?_C++_Namespaces_Using Directives - Fatal编程技术网

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”创建的受污染名称空间,并且全局名称空间保持不变?