不可否认,我是C ++的新手,我正在努力学习不同的新东西。
请解释using namespace std
我的意思是,有些人一直使用std::cin
或std::string
之类的内容,而不是键入using namespace std
,只需使用cin
或string
向前。有没有什么好理由让他们通过挤奶你知道什么是std ::?
答案 0 :(得分:2)
using namespace std;
可以被使用和滥用,就像大多数其他东西一样。
你应该记住的一条规则是
using namespace std;
。这是因为像distance
这样的名字很容易与客户代码发生冲突。
通常,C ++命名空间的优点是它们允许在名称冲突的情况下轻松消除歧义,同时通常允许您使用可读的非限定名称。如果一个人总是对名字进行限定,那么与C风格的固定前缀和后缀的唯一区别就在于::
的存在,并且我认为可以认为在名称中使用这些冒号是有利的。但是这个参数只适用于自己定义的命名空间:对于std
命名空间,可以认为它是由标准强加的,因此完全限定名称的实践意味着始终使用std::
(和我知道这是由许多公司完成的,尽管我强烈反对这些程序员声称代码然后更多可读而没有std::
前缀)。
答案 1 :(得分:0)
这根本不是一个愚蠢的问题。
iostream是一个C ++代码文件(更具体地说是一个头文件,但这并不重要)。它包含定义cout,cin,endl等的代码。如果我们想要使用它们,我们需要它们在我们的代码中,这就是我们包含它的原因。但是,如果我们看一下它的内容,我们将(示意性地)看到这样的东西(这不是一个尝试映射iostream的严肃尝试,但我会避免使事情太复杂,并且为了解释,它会做):
// iostream header file
namespace std
{
ostream cout;
istream cin;
// etc etc
};
使用using关键字并不意味着我们添加功能,这意味着我们说我们默认读取内容。如果我们说使用namespace std;然后我们说:如果我们遇到当前命名空间中不存在的OBJECT名称,请检查是否存在它确实存在的命名空间std,并使用该对象。因此,它并没有真正添加一个函数,它是“加载”cout,cin,endl和所有类似的包含。
(请注意,上面的示意图不是打开iostream文件时会发现的,实际上它更复杂,并且包含很多定义。)
教程页面提供了一个很好的解释http://www.cplusplus.com/doc/tutorial/namespaces/
答案 2 :(得分:0)
命名空间是一种构造程序的方法,假设你有自己的字符串类,它放在命名空间foo中。如果没有显式输入std:string,编译器会混淆应该使用哪个字符串。