using namespace std;
到目前为止,在我的计算机科学课程中,这是我们被告知要做的全部内容。不仅如此,而且我们已被允许做的一切,否则我们的代码就会受到惩罚。通过查看在线发布的代码,我了解到你可以使用:: std或std ::来完成同样的事情。
我的问题是为什么?显然,为了学习者和简单使用全局声明更简单,但有什么缺点?在现实世界的应用程序中期待:: std更现实吗?我想补充一点,使用声明背后的逻辑/概念是什么?在我的课程中没有解释过这一点,我想更好地掌握它。
作为一般性问题:如果我没有教过这些内容,向量,模板,类或错误处理,我似乎缺少很多基本的C ++功能吗?
提前致谢!
答案 0 :(得分:3)
这真的是你可以用啤酒讨论几个小时和几个小时的事情之一,但仍然没有一个人都满意的答案。
如果您几乎总是使用std::
功能,那么在文件开头添加using namespace std;
并不是一个好主意。另一方面,如果您使用来自多个命名空间的内容(例如,使用llvm::
编写编译器并使用std::
,则可能会混淆哪些部分属于{{1}以及哪些部分是llvm
- 所以在我的编译器项目中,我没有std::
的单个文件 - 而是写出using namespace ...;
和llvm::
为需要。有几个函数(不明智,可能)称为std::
,有些地方使用Type()
来获取我需要的类型...是的,它甚至会让我有点困惑。 ..
我还有很多看似something->Type()->Type()
和Constants::ConstDecl
的内容,因此我可以快速查看"什么是"。所有这些都可以做得更短,更简单"但我更喜欢看到大部分时间都属于哪里。
更详细有助于更容易看到事物的属性 - 但它可以提供更多的打字和更多的阅读,所以它是一种平衡。
答案 1 :(得分:1)
我通常说,你没有声明全局使用std。我想如果您正在制作一个简单的应用程序,那就足够了。但是,当您在大型组织中工作时,您经常会使用不同的命名空间,并且这些命名空间可能具有重叠的对象。如果你在std和你创建的命名空间中有一个函数,然后调用"使用namespace std" AND"使用命名空间yournamespace",调用该函数时会得到不需要的结果。当您使用命名空间为每个调用添加前缀时,它会使其更清晰,并且不会出现重叠问题。
答案 2 :(得分:1)
一般为什么?
命名事物是软件开发中比较困难的方面之一。初学者根本不知道他们的名字选择如何在以后产生歧义。
特别是,我们的软件术语通常对某些问题有首选术语。这些首选项可能会导致使用具有相似含义的相同(或类似)符号开发不相关的类实例。
我经常使用的一些符号包括init(),exec(),load(),store(),以及我使用timeStampGet()的很多地方。我还使用open(),close(),send()/ recv()或write()/ read()。
所以,我可以在3个名称空间中的每一个中重命名init(),并在其中添加5个对象,但指定我想要的更简单。
我在2个名称空间和12个对象中找到exec()。我使用了3种不同的timeStampGet()方法。无论是命名空间还是函数或类方法,这些符号对我来说都是有意义的。
此外,我找到了5个char" std ::" namespace-as-prefix完全自然,比全局"使用命名空间std"更好。我想这来自练习。
还有一个项目 - 任何更大的名称空间或类名称变得令人厌烦的地方,我有时会添加一个typedef短名称......这里有一些来自生产代码的例子:
typedef ALARM_HISTORY ALM_HST;
typedef MONITOR_ITEM MI
typedef BACKUP_CONTROL BC;
在一个团队中,我们同意使用定义良好且完整的#39;名字,偶尔因长度而变得无聊。在项目的后期,我们同意typedef(对于短类或名称空间名称)可以在它们很简单时使用,并且不会引起混淆。
答案 3 :(得分:1)
我个人讨厌“使用”声明。对我来说,他们使代码不可读,你破坏名称空间。我已经花了20年时间作为维护程序员而且我讨厌任何使代码更难阅读的东西 - 在我看来,使用和抛出规范一样没用。
什么是更具可读性的6个月 - 一年 - 10年后
UDP::Socket sock
sock.send(data)
TCP::Socket sock2
sock2.send(data)
VS
using UDP;
using TCP;
sock.send(data)
sock2.end(data)
我也不喜欢命名空间别名
using namespace po = boost::program_options;
现在,您正在努力让下一个程序员更加努力地工作,并提供额外的间接级别查找po与boost :: program_options相比较的内容。
那些可怕的typedef也是如此typedef long QUADWORD;
四字的大小 - 长4个字节有多长?我的操作系统上有8个字节,可能是17个字节
我的最后一点是如果你不能打字那么就不要成为程序员 - 保存的按键!=良好的可维护代码