编程者看看(c&c++)

来源:百度知道 编辑:UC知道 时间:2024/06/06 03:14:23
#include <iostream>
#include <Stack>
using namespace std;
namespace Stack
{
void push(char);
char pop();
}
void f()
{
Stack::push('c');
if(Stack::pop() != 'c')error("impossible");
}
这个问题程序的namespace Stack
什么意思?

那个是定义一个名字空间,定义名字空间的用处是为了防止C++中名字太多会混淆,定义一个名字间后访问里面的数据和访问类内的数据成员一样,都是用双比号.

你可以看看《C++ Primer》第三版的第2.7节,书中详细说明了名字空间的概念,希望对你有帮助,我摘抄了部分,如下:

把代码分发给其他部门的诸多困难中有一个是我们不知道全局名字会有什么样的影响
例如在Intel 公司有人写了
class Array { ... };
那么他就不能在相同的程序中既使用上面的Array 类又使用我们实现的那个Array 类
名字的可视性使这两份实现代码相互排斥
在C++标准化之前解决这个问题的传统做法是在全局可见的名字前加上一个唯一的字
符串前缀例如我们可以这样发行数组Array 类
class Cplusplus_Primer_Third_Edition_Array { ... };
虽然这个名字可能是惟一的(我们不能保证这一点)但是写起来并不方便,标准C++
的名字空间机制是C++语言针对这个问题提供的语言一级的解决方案
名字空间机制允许我们封装名字否则这些名字就有可能会污染(影响)全局名字空间
(pollute the global namespace) 一般来说只有当我们希望自己的代码被外部软件开发部
门使用时才使用名字空间

关键字namespace 后面的名字标识了一个名字空间它独立于全局名字空间我们可以
在里面放一些希望声明在函数或类之外的实体名字空间井不改变其中的声明的意义只是
改变了它们的可视性

为了防止标准C++库的组件污染用户程序的全局名字空间所有标准C++库的组件都声
明在一个被称为std 的名字空间内正如在第1 章中提到的即使我们在程序文本文件中包
含了C++库头文件头文件中声明的组件在我们的文本文件中也不是自动可见的