当前位置:C++技术网 > 精选软件 > C++ Primer Plus 6th 2.6 复习题 第3题 using namespace std

C++ Primer Plus 6th 2.6 复习题 第3题 using namespace std

更新时间:2019-02-15 11:28:00浏览次数:1+次

C++Primer Plus 6th 2.6复习题解答 第3题
题目:
3.下面的语句是做什么用的?
using namespace std;

答案:它使得程序可以使用std名称空间中的定义。
    
C++技术网辅导详解解答:

    要想非常详细的弄明白这个问题,我们需要一步步来,我们先解释几个概念:标准、命名、命名空间、使用指令。
1.标准
    什么是标准?你自己脑子里过一下,你理解的标准是什么?标准是干什么用的?为什么要有一个标准?可能这一连串的发问,你也不知道什么是标准。我在这里说一下我对标准的理解,不代表是权威的,不代表是标准的,也不代表一定是完全正确的,仅供你参考和理解。
    标准,即标定,然后看准。标定,就是要人为主动的去制定一个东西,而且进行规范化,记录在案,供后者参考。所以我们有各种标准的舞蹈动作,标准的普通话。那么什么是标准的普通话?你得事先制定一套大家觉得认为是最优雅合适的表达方式,然后标定,记录在案。就形成了一个标准的普通话。那么这个工作,我们事先得去标定,什么样的是普通话,什么样的不是普通话。标定完后,就要进行普及,“请讲普通话”,这是很早时候大力宣传的口号。之前不说普通话的人,都讲地方方言,现在一下子说普通话,就要学,学完之后就要说。那么标定的方式大家都学了,但是是不是每一个人就都能说的准呢?不一定,各地因为方言的发音习惯,也都形成了相应的发音习惯,所以在说普通话的时候都或多或少带些方言的腔调,也就是常说的带地方口音,我们就说这些人说的普通话不准确了。
    只有按照标定的规范做到了,才是标准的。那么在C/C++语言里,各项工作自然也会有标准的存在,标准的存在是为了让各项工作在日益复杂后仍然能够有条不紊的进行,这才有了标准的东西。C/C++语言的语法自然也非常规范标准。其他语言的语法或者大部分参考C/C++的语法,或者或多或少参考C/C++的语法标准。
    所以,标准的制定,通常是综合各项因素得到的一个非常平衡的解决方案。
2.命名
    什么是命名?命名就是取名字。我们每一个人都有一个名字,这些名字都是我们的长辈取的,我们的名字也就是长辈们对我们的命名。有了这个名字,我们终身都被标定为一个名字符号,人家通过名字就可以联系到我们这个人,让人与人之间更加方便的沟通联系。
    在编程里面,我们对各个东西也是需要命名的,这样我们非常好的管理这些东西。这些东西包括变量、常量、结构体、类、对象等等,很多很多东西,我们都需要管理,所以我们都要给它们命名。有了名字,我们在查找,修改等都容易得多。当然,你说可不可以不命名呢?可以!匿名函数、匿名对象、匿名类等等,都也是可以的。不过这些匿名的东西,没有了名字,基本上使用场景非常有限,走不出门,出门别人不知道它们是谁,最后也没法管理,最后就遗忘了,很可能就成为了孤魂野鬼,最后被阎王一把收拾了。
3.命名空间
    命名很重要,名字的独特性也很重要。然而,名字再怎么组合,重合的概率还是太大了。好的名字大家都想到了,都可以取,就是一个家庭,在繁衍了几十代之后,名字也有可能是重合的。如果你感觉不到重名的程度,你可以在搜索引擎里搜索自己的名字,就可以搜到很多和自己无关的但是名字却和自己一样的人的信息。宗族(同一个祖宗的后代形成的一群人)为了确保重名问题,而且解决多个分支代际之间的不同步问题,所以发明了辈分。通过辈分(代数名称),可以看出不同支系繁衍的代数,而且还可以解决重名问题。辈分一般是名字中间一个字,第一个字是姓氏,最后一个字是大名。比如李小龙,辈分是小。如果有了后面四代,然后有一个孩子想取龙这个字,也是可以的。比如可以叫做李卡龙(假设辈分顺序:封小人卡中)。李卡龙的孩子如果也想取大名为龙,那么就可以叫李中龙。
    巧妙吗?虽然都是一个族系的人,也可能隔得代数不多,但是因为有了辈分,很大程度上解决了重名的问题。否则一村还可能有两个叫李小龙的人,那不是很麻烦嘛。
    那么这个辈分是什么概念呢?辈分其实就是给一代人划定的一个命名的范围。只要在同一个命名范围里的名字,属于一代人,而且这里的名字和后代的名字是不会重名的。这个辈分和编程里的命名空间其实就是差不多的意思了。
    一个程序里,我们可能引入很多库,不同的库用了不同的命名方式,不同的人都可能取一样的名字,这就可能导致一个程序里多个地方的名字重名了,然后在执行程序的时候,使用了错误的东西。我们叫读取一个叫做cc的局部变量,最后却读到了一个名字为cc的全局变量。最后程序的逻辑就乱了,因为数据是不对的。我们还很难找到问题。因为语法并没有错哦。
    命名空间的使用,成功解决了命名的冲突。你用了哪个命名空间,就只会去这个命名空间下读取这个名字,其他名字尽管一样,也是可以忽略的。就好比李小龙和李卡龙,因为辈分(命名空间)的存在,因而是可以区别开的。
4.使用指令
    使用命名空间,自然就需要一套语法了。使用命名空间的语法就是用using指令。通过using,我们告诉编译器,我们要用的是哪里的命名空间。然后namespace告诉编译器,你要用的是命名空间。而后面接着的就是命名空间的名字。std就是标准的缩写,指的是标准的。那么合起来:
using namespace std;
    就是要使用标准的命名空间里的所有名字。写了这句代码,那么只要是标准命名空间里的名称,全部可以直接用。如果不写这个语句,那么以后要用,那么就要用using直接指定要用的名字。如:
using std::cout;
    这就是说要使用标准命名空间的cout名字。
    那么标准命名空间是什么呢?其实就是预先定义的一组随着C/C++语言一起发布的被系统预先定义好了的名字集合。比如cout、cin、printf等等,这些名字都是系统已经预定以好了的,所以它就是标准的名字。这些名字的命名,都是非常简洁明了,有意义,规范的,所以被定为标准的。使用也非常广泛。