使用命名空间std vs其他选择

这个问题在这里已经有了答案:

  • 为什么“使用名称空间标准”被认为是不好的做法? 35个答案

  • 这实际上是你可以在几小时和几小时内就啤酒进行讨论的事情之一,但仍然没有一个人人都满意的答案。

    如果你几乎总是使用std:: functional,那么using namespace std; 在文件的开头并不是一个坏主意。 另一方面,如果你正在使用来自多个命名空间的东西(例如,使用llvm::编写一个编译器并使用std:: ,则可能会混淆哪些部分是llvm一部分,哪些部分是std:: - 所以在我的编译器项目中,我没有using namespace ...;的单个文件using namespace ...; - 而是根据需要写出llvm::std:: 。有几个函数(可能不明智,也许)称为Type() ,有些地方使用something->Type()->Type()某些something->Type()->Type()来获得我需要的类型文件...是的,它有时候会让我感到困惑......

    我也有许多看起来像Constants::ConstDeclToken::RightParen ,这样我就可以快速看到“什么是什么”。 所有这些都可以缩短和“更简单”,但我更喜欢看大部分时间属于哪里。

    更详细的说明可以帮助我们更容易地看到事物属于哪个地方 - 但它使得打字更多,阅读更多,所以它是一种平衡。


    我会说,一般来说,你不要声明全局使用std。 我想如果你正在做一个简单的应用程序,那就足够了。 但是,当您在大型组织中工作时,通常会使用不同的名称空间,而且这些名称空间可能具有重叠的对象。 如果你在std和你创建的命名空间中有一个函数,然后调用“using namespace std”和“using namespace yournamespace”,那么调用该函数时会得到不想要的结果。 当你用命名空间为每个呼叫加上前缀时,它会使它更清晰,并且不会给出重叠问题。


    一般为什么?

    命名事物是软件开发中比较困难的一个方面。 初学者根本不知道他们的名字选择可能会在以后产生歧义。

    特别是,我们的软件行话通常对某些问题具有首选条款。 这些偏好可以导致不相关的类实例使用具有相似含义的相同(或类似)符号开发。

    我经常使用的一些符号包括init(),exec(),load(),store(),并且我使用timeStampGet()很多地方。 我也使用open(),close(),send()/ recv()或write()/ read()。

    因此,我可以在3个名称空间中的每一个中重命名init(),还可以将5个对象添加到其中,但是指定我想要的对象会更加简单。
    我在2个名称空间和12个对象中找到exec()。 我使用了3种不同的timeStampGet()方法。 无论名称空间还是函数或类方法,这些符号都对我有意义。

    此外,我发现5个字符“std ::”命名空间作为前缀是完全自然的,并且比全局“使用命名空间标准”更可取。 我想这是伴随练习而来的。

    还有一个项目 - 任何一个更大的名称空间或类名称变得令人厌烦的地方,我有时会添加一个typedef短名称......以下是生产代码中的一些示例:

    typedef ALARM_HISTORY   ALM_HST;
    typedef MONITOR_ITEM    MI
    typedef BACKUP_CONTROL  BC;
    

    在一个团队中,我们同意使用明确定义的“全名”,由于篇幅有限,偶尔会变得很烦人。 在项目的后期,我们同意typedefs(用于简短的类或名称空间名称)可以在简单的时候使用,并且不会产生混淆。

    链接地址: http://www.djcxy.com/p/29785.html

    上一篇: Using namespace std vs other alternatives

    下一篇: ptr ambiguity? (stl vs boost)