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;
}



原文地址:https://www.cnblogs.com/dyllove98/p/3132781.html