C++编程思想读书笔记-10 名字控制
1 可见范围控制
连接只针对在连接/装载期间有地址的成员.
全局变量,普通函数默认是外部连接(对其它文件可见,默认的extern属性)
全局const变量除外,全局const变量默认是内部连接的(static属性)
全局变量是静态存储的
static对全局变量的作用是改为内部连接(对其它文件不可见), 对局部变量的作用是改变其存储类型(由动态存储改为静态存储)
2 静态变量
静态存储的变量第一次调用时(定义时)必须初始化
对于内部类型,默认进行零初始化. 但对自定义类型,若没指定构造函数参数,则要有默认构造函数.
全局变量总是在main之前被创建,退出main时销毁 (全局变量总是静态存储,是静态变量)
局部静态变量只有在调用时才初始化,若没调用则不初始化.
局部静态变量与局部变量区别: 只在第一次调用时初始化,在两次函数调用期间保持其值
3 命名空间
书上讲的太过复杂, 我以前的博客整理了简单的. http://blog.csdn.net/a8887396/article/details/8760230
4 C++中的静态成员
静态数据成员的定义必须在内的外部,不允许内联.
1 如果静态成员是内部类型 初始化直接用=
2 如果静态成员是数组 初始化也用等号
3 如果静态成员是对象 则用构造函数
#include "stdafx.h" #include <string> #include <iostream> using namespace std; class Value { static int x; static int a[10]; static string str; static string b[5]; public: void print(); }; int Value:: x = 100; int Value::a[10] ={1,2,3,4,5,6,7,8,9,0}; string Value::str("hello"); string Value::b[5]= { string("h"),string("e"), string("l"),string("l"), string("o")}; void Value:: print() { cout << "x:" << x << endl; cout << "a:" ; for(int i=0;i<10;i++) { cout << a[i] << ' '; } cout << endl; cout << "str" << str << endl; cout << "b:"; for(int i=0;i<5;i++) { cout << b[i] << ' '; } cout << endl; } int _tmain(int argc, _TCHAR* argv[]) { Value v; v.print(); system("pause"); return 0; }