荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: cocomo (玻璃上的蚂蚁,前途光明却总也找不到出路), 信区: Program
标  题: 关于using namespace std
发信站: 荔园晨风BBS站 (Thu Oct 12 20:27:06 2006), 站内

1.3.2 命名空间
  在上面的简单C++程序中,有一行代码没有解释。为了理解这行代码,需要知道什么是
命名空间。为了说明命名空间的含义,下面先讨论名称。上面C++程序中还没有解释的代码
行如下:
using namespace std;
  在前一节讨论的标识符规则中,可以为程序中的元素选择使用任何名称。显然,可以为
标准库中已经用于其他目的的元素选择一个名称。同样,如果两个或多个程序员为同一个大
型工程的不同部分工作,就会有潜在的名称冲突。显然,为两个或多个不同的元素使用相同
的名称会导致冲突,命名空间就解决了这个问题。
  命名空间的名称有点像姓氏。家庭中的每个成员都有自己的姓名,在大多数家庭中,每
个家庭成员都有一个惟一的名字。在Smith家中,有Jack、Jill、Jean和Jonah。在家庭成员
之间,用名字来指代每个人。但是,其他家庭的成员可能与Smith家的成员有相同的名字。
例如,在Jones家中,其成员的名字是John、Jean、Jeremiah和Jonah。Jeremiah Jones在称
呼Jean时,显然是指Jean Jones。如果他想指代Smith家中的Jean,就要使用全名Jean
Smith。如果不是这两个家庭的成员,就只能使用每个人的全名来指代他本人,例如Jack
Smith或Jonah Jones。
  这就是命名空间的作用。命名空间的名称类似于姓氏。在命名空间内部,可以使用其成
员的名字。在命名空间的外部,就只能把某个实体的名字和命名空间的名称组合起来,表示
该命名空间中的实体。命名空间的目的是提供一种机制,使大程序的各个部分中因出现重名
而导致冲突的可能性降到最低。一般情况下,一个程序中包含几个不同的命名空间。
  C++标准库中的实体都是在命名空间std中定义的,所以标准库中的所有实体名都用std
来限定。cout的全名就是std::cout,其中的两个冒号有一个非常好听的名称:范围解析运
算符,稍后详述。在这个例子中,该运算符把命名空间的名称std和流的名称cout分隔开来

  在这个简单的C++程序中,开头的using指令表示我们希望在每次引用命名空间std中的
元素时,不指定命名空间的名称。继续前面的类推,使程序文件成为std家族的一组荣誉成
员,就可以只用名字来引用每个成员了。其优点之一是不需要把cout表示为std::cout,这
样程序代码就更简单。如果省略using指令,就必须把输出语句写为:
  std::cout <<"The best place to start is at the beginning";
  当然,尽管这使代码略为复杂一些,但这样编写出的代码比较安全,也比较好。Using
指令的作用是允许使用命名空间中的某个名称,而不必用命名空间的名称来限定它。有时也
可以这么做:用命名空间的名称明确限定cout,就不必在程序中使命名空间中的所有名称都
可用了。这样,在程序中定义的任何名称和在命名空间中定义的名称就不可能出现冲突了。
  如果把这个例子的程序代码改成下面的形式,就比较好:
// Program 1.1 A simple C++ program
#include <iostream>
int main() {
std::cout <<"The best place to start is at the beginning";
return 0;
}
  但是,这些代码虽然比较安全,如果代码中有许多std::cout,代码看起来就很混乱了
。我们还必须在程序的许多地方重复输入std::,在这种情况下,可以使用using指令在程序
源文件中引入命名空间中的一个名称。例如,使用下面的指令可以在程序文件中引入std命
名空间中的名称cout:
using std::cout;
  使用这个指令,可以两全其美:以未限定的方式使用std命名空间中的名称cout,代码
中的名称也不会与std命名空间中的其他名称冲突,因为它们不使用std限定符是不能使用的
。程序现在变成:
// Program 1.1A A simple C++ program
#include <iostream>
using std::cout;
int main() {
cout <<"The best place to start is at the beginning";
return 0;
}
  当然,也可以为每个名称使用using指令,把std命名空间中的一些名称引入程序文件。
应为代码中常用的名称使用using指令,通过完全限定的名称来访问std命名空间中不太常用
的其他名称。
命名空间和using指令的内容远比这里介绍的多,详见第10章


【 在 cocomo (玻璃上的蚂蚁,前途光明却总也找不到出路) 的大作中提到: 】
: 【 在 ew (夜静心贻,罪犹可止.) 的大作中提到: 】
: :   ----------------- 这个加上去干嘛,
:  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:    申明引用命空间。
:     举个例子:程序员A和程序员B合作完成一个程序,当他们完成各自不同
: 部分想结合在一起的时候发现有很多名称相同的函数类或变量,于是
: using namespace A
: using namespace B
: 在程序中通过名空间可以调用想调用的部分
: : ...................
: ...................

--
                   ┏━━━┓     ┏━━━┓     ┏┓  ┏┓
                   ┣━    ┃     ┃    ━┫     ┃┃  ┃┃
                   ┃      ┃     ┃  ★  ┃     ┃┃  ┃┃
                   ┃    ━┫     ┣━    ┃     ┃┗━┛┃
                   ┗━━━┛     ┗━━━┛     ┗━━━┛
             白云山高       珠江水长       吾校矗立       蔚为国光


※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 219.134.251.39]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店