多次包含命名空间

shi*_*mar -1 c++ c++11

如果多次包含相同的命名空间会有问题吗?

#include<iostream>
using namespace custom;
using namespace custom;
Run Code Online (Sandbox Code Playgroud)

是否可以将guard应用于名称空间之类的头文件,以便不会多次包含名称空间?(比如#ifndef ...)

Bar*_*ski 5

最好不要在标题中使用"using namespace".

  • 尽管这是一个很好的做法,但绝对没有证据表明OP正在这样做. (2认同)
  • 我没有在头文件中包含命名空间.它包含在cpp中. (2认同)

jde*_*ero 5

命名空间指令和预处理器指令之间存在差异。你可以写两次,但这不会有任何帮助。

其次,没有办法“防范”这一点,因为这不是一个问题。命名空间指令不需要被保护,也不需要重复。

这篇文章传达了一些关于命名空间可能出现错误的地方。如果此信息无关,我们深表歉意 - 只是试图提供清晰度。

平图·舒克拉的帖子——

命名空间只是代码或变量的声明区域。它用于避免变量或函数名称等之间的冲突,请查看以下代码。

这是一个有效的代码

namespace st
{
int i =0;
}
namespace st
{
 int j =0;
}

using namespace st;

int main(int argc, char* argv[])
{
i=15;
j =10;
cout<<i<<j;
return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在尝试这个。这段代码会给你一个错误“i”:重新定义和多重初始化

代码块

namespace st
{
int i = 0
}

namespace st
{
int i =0;
}

using namespace st;

int main(int argc, char* argv[])
{
i=15;
cout<<i;

return 0;

} 
Run Code Online (Sandbox Code Playgroud)

因此,如果您声明了两个具有相同名称的命名空间,那么这是正确有效的。但如果两个命名空间包含相同的对象,则会抛出错误。