您的位置:首页 > 编程语言 > C语言/C++

C++编程思想(2nd卷一):名字控制

2009-11-05 09:45 162 查看
在C和C++中,static都有两种基本的含义,并且这两种含义经常是互相冲突的:

1.在固定的地址上进行存储分配,也就是说对象是在一个特殊的静态数据区上创建的,而不是每次函数调用时在堆栈上产生的。这也是静态存储的概念。

2.对一个特定的编译单元来说是局部的。这样,static控制名字的可见性,所以这个名字在这个单元或类之外是不可见的。这也描述了连接的概念,它决定连接器将看到哪些名字。

零赋值只对内部类型有效,用户自定义类型必须用构造函数来初始化。

在文件作用域内,一个被声明为static的对象或函数的名字对翻译单元来说是局部于该单元的。这些名字有内部连接。这意味着可以在其他的翻译单元中使用同样的名字,而不会发生名字冲突。

用可见性术语来讲,static的反义是extern,它明确地声明了这个名字对所有的翻译单元都是可见的。

namespace的特征:

1.namespace只能在全局范围内定义,但它们之间可以互相嵌套。

2.在namespace定义的结尾,右花括号的后面不必跟一个分号。

3.一个namespace可以在多个头文件中用一个标识符来定义,就好像重复定义一个类一样。

4.一个namespace的名字可以用另一个名字来作它的别名,这样就不必敲打哪些开发商提供的冗长的名字了。

5.不能像类那样取创建一个名字空间的实例。

using声明与普通声明只有一点不同:using声明可以引起一个函数用相同的参数类型来重载。

在一个名字空间中引用一个名字可以采用三种方法:

1.用作用域运算符(::)。

2.用using指令把所有名字引入到名字空间中(using namespace 空间名)。

3.用using声明一次性引用名字。

必须在static const定义的地方对它进行初始化。数组、非内联和非常量的数据成员必须在类的外部定义和初始化(不允许内联),而且只能定义一次,因此它通常放在一个类的实现文件中。

不能在局部类中有静态数据成员。

因为静态成员函数没有this指针,所以它既不能访问非静态的数据成员,也不能调用非静态的成员函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: