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指针,所以它既不能访问非静态的数据成员,也不能调用非静态的成员函数。
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指针,所以它既不能访问非静态的数据成员,也不能调用非静态的成员函数。
相关文章推荐
- C++编程思想(2nd卷一):名字控制
- 【c++编程思想】第十章 名字控制
- C++笔记——c++编程思想(上)第九十章 内联函数及名字控制
- C++编程思想(2nd卷一):运算符重载
- C++编程思想笔记——命名控制
- C++编程思想(2nd卷一):引用和拷贝构造函数
- C++编程思想(2nd卷一):动态对象创建
- C++编程思想(2nd卷一):函数重载与默认参数
- C++编程思想(2nd卷一):运算符重载
- C++编程思想(2nd卷一):继承和组合
- C++编程思想学习——名字控制
- C++编程思想(2nd卷一):常量
- C++编程思想(2nd卷一):动态对象创建
- C++编程思想(2nd卷一):函数重载与默认参数
- C++编程思想(2nd卷一):多态性和虚函数
- C++编程思想(2nd卷一):继承和组合
- C++编程思想(2nd卷一):常量
- C++编程思想(2nd卷一):模板简介
- C++编程思想(2nd卷一):多态性和虚函数
- C++编程思想(2nd卷一):内联函数