故事
最近稣在梳理一份 Google C++ Coding Style 的更严格版本,其中,有一条是“在大范围禁止使用 using namespace
”,结果获得 100% 员工的支持。员工人数:1!
分析
具体来说,大范围指的是比函数更大的范围。通常的 Coding Style 可能会提到:禁止在头文件里使用 using namespace,而这里的禁止显然涉及的地方更多。禁用它的理由通常有以下这些:
-
降低可维护性:using namespace 会降低代码的可读性,因为它隐藏了实体的来源,读者需要额外的工作来确定一个名称属于哪个命名空间。如果后续添加或修改了同名的实体,可能导致编译失败,甚至可能引入难以发现的错误。
-
降低编译性能:using namespace 可能会导致编译器查找符号时的性能下降,因为它需要在所有导入的命名空间中搜索。
同时,我们放开了例外的限制,没错,您可以在任何地方,比如头文件里,使用 using namespace
各种 std::literals
!
如果您觉得不使用 using namespace,会导致需要写大量很长的 namespace,那您应该使用 namespace 定义别名来缩短,如果是本项目的 namespace 倾向于使用最短的简称。例如:
1 | namespace d = umutech::regame::diagnostics; // 自己的命名空间,尽量短 |