bas*_*hrc 1 c++ coding-style namespaces
许多程序员告诉我,using namespace <x>在头文件中有一个语句是个坏主意.我一直盲目地遵循这个建议,直到现在却不明白为什么会如此.现在我正在开发一个包含大量命名空间的非常复杂的项目.有时我发现在开头告诉编译器关于命名空间而不是每次都要输入nested ::'是太诱人了.例:
ALongNameSpaceName::LongerNamespaceName::BasicUtilityFunctionUsedVeryCommonly
Run Code Online (Sandbox Code Playgroud)
这条规则背后的理由是什么?在哪些情况下我可以忽略此规则?
由于头文件被其他文件包含,因此您污染了使用您的代码的其他人的全局命名空间.你可能认为有点污染是可以的,但如果每个人都这么想,我们就会很快耗尽好名字.如果您真的无法拒绝在标头中使用命名空间指令,请将其限制在标头内.您可以通过将指令放在作用域内来实现.例如,如果您有自己的命名空间块,其主体完全受限于您的头文件,那么您可以在其中放置using指令而不会污染全局命名空间.
namespace your_namespace
{
// this directive is restricted to this namespace block
using namespace ALongNameSpaceName::LongerNamespaceName;
...
}
Run Code Online (Sandbox Code Playgroud)
您也可以在函数内部执行此操作,而不必担心它会影响其他代码.