const C语言中const修饰的变量存在静态区,c++中存在代码区不占内存。
在头文件中定义
//test.h
#ifndef _TEST_H_
#define _TEST_H_
const int a = 0;//这是可行的,在编译阶段,每个包含test.h的文件会生成一个const int a=0;存放在不同地址单元不是全局变量
#endif
static //存放在静态区
在头文件中定义
//test.h
#ifndef _TEST_H_
#define _TEST_H_
static int a = 1;//这是可行的,在编译阶段,每个包含test.h的文件会生成一个static int a=1;存放在不同地址单元也不是全局变量
#endif
extern //全局变量存放在静态区
在头文件中定义
//test.h
#ifndef _TEST_H_
#define _TEST_H_
extern int a;//这是可行的,在编译阶段,每个包含test.h的文件会生成一个extern int a;存放在同一地址单元是全局变量 //正确用法
//使用的时候首先在其中一个".c"文件定义int a; 之后才可以正确运行,因为extern 的含义是变量定义在别的位置。但如果不在其中一个文件定义int a;这表示a不存在。
//所以没有意义。
extern int a=0;//这是可行的,相当于int a = 0,但是多个头文件包含是会发生重定义问题 //错误用法
#endif
在头文件中的类中使用
#ifndef TEST_H
#define TEST_H
class test
{
public:
const static int a=10;//在其他文件使用 直接使用 cout<<<test::a; 相当于全局常量
// static int a;//在其他文件使用 先声明 extern int test::a; test::a=10; cout<<a; 相当于全局变量
//const int a=0;//不能直接使用
public:
test();
virtual ~test();
protected:
private:
};
#endif // TEST_H