在C和C++中,static都有两种基本的含义,并且这两种含义经常是互相冲突的:
1.在固定的地址上进行存储分配,也就是说对象是在一个特殊的静态数据区上创建的,而不是每次函数调用时在堆栈上产生的。这也是静态存储的概念。
2.对一个特定的编译单元来说是局部的。这样,static控制名字的可见性,所以这个名字在这个单元或类之外是不可见的。这也描述了连接的概念,它决定连接器将看到哪些名字。
零赋值只对内部类型有效,用户自定义类型必须用构造函数来初始化。
在文件作用域内,一个被声明为static的对象或函数的名字对翻译单元来说是局部于该单元的。这些名字有内部连接。这意味着可以在其他的翻译单元中使用同样的名字,而不会发生名字冲突。
用可见性术语来讲,static的反义是extern,它明确地声明了这个名字对所有的翻译单元都是可见的。
namespace的特征:
1.namespace只能在全局范围内定义,但它们之间可以互相嵌套。
2.在namespace定义的结尾,右花括号的后面不必跟一个分号。
3.一个namespace可以在多个头文件中用一个表示符来定义,就好像重复定义一个类一样。
4.一个namespace的名字可以用另一个名字来作它的别名,这样就不必敲打哪些开发商提供的冗长的名字了。
5.不能像类那样取创建一个名字空间的实例。
在一个名字空间中引用一个名字可以采用三种方法:
1.用作用域运算符(::)。
2.用using指令把所有名字引入到名字空间中(using namespace 空间名)。
3.用using声明一次性引用名字。
因为静态成员函数没有this指针,所以它既不能访问非静态的数据成员,也不能调用非静态的成员函数。