使用命名空间std vs其他选择
这个问题在这里已经有了答案:
这实际上是你可以在几小时和几小时内就啤酒进行讨论的事情之一,但仍然没有一个人人都满意的答案。
如果你几乎总是使用std::
functional,那么using namespace std;
在文件的开头并不是一个坏主意。 另一方面,如果你正在使用来自多个命名空间的东西(例如,使用llvm::
编写一个编译器并使用std::
,则可能会混淆哪些部分是llvm
一部分,哪些部分是std::
- 所以在我的编译器项目中,我没有using namespace ...;
的单个文件using namespace ...;
- 而是根据需要写出llvm::
和std::
。有几个函数(可能不明智,也许)称为Type()
,有些地方使用something->Type()->Type()
某些something->Type()->Type()
来获得我需要的类型文件...是的,它有时候会让我感到困惑......
我也有许多看起来像Constants::ConstDecl
和Token::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