C和C++根本就不是一回事;从设计之初就不该用相近的语法;
一边试验一边记录
在C和C++中,static类型变量存储位置一致,都放在程序的全局存储区中;
//----------------------------------------------------------------------------------------------------------------
C里边就两种情况而已;
一是静态全局变量,作用域仅限于变量被定义的文件中,其他文件用extern声明没法使用它;
准确地说作用域是从定义之处开始,到文件结尾结束;在定义只处前面的那些程序行也不能使用它;
想要使用就得在前面再加extern ***;比较变态,直接在文件顶端定义不就得了;
二是静态局部变量,在函数体里面定义的,就只能在这个函数里用了,同一个文件中的其他函数也用不了;
void funcx(){
static long dwvalue; //这个值就只能在这个函数里面用了,函数退出了,值还留在里面;
// 函数下次被调用的时候里面的值还是上次退出时的,就这么点用处;
//再有就是如果静态局部变量如果带有初始赋值,如下:
static long rlvalue = 78; //这个赋值其实是在编译的时候进行的,这个值在整个程序运行期间只会初始化一次,
//并不会在每次函数运行时赋一次值;
}
//-----------------------------------------------------------------------------------------------------------------
C++:
关于静态全局变量和静态局部变量是和C相同的;
static的成员函数和成员变量就不一样了,完全是外部的;
为什么涅?好像我是这么理解的,本来定义个类就是为了复用,你让人家在别的模块里用不了,那算什么!?
所以就用呗;
ClassName::Value , ClassName::Function() 这样很常见吧;
类的static数据成员,只是声明了在那占个空;编译器不对类内部静态数据成员分配空间;
你要用的话还得自己去声明一个全局静态变量;
#p#副标题#e#
#p#副标题#e#
静态数据成员不论public\protected\private的都可以用ClassName::Name访问;
class CA{
public:
static long value; //这是骗人的,编译的时候不给它分配空间;
static void fun();
private:
static long value1; //这个私有的除了用 CA::value1以外就只能用成员函数和友元函数访问了
};
long CA::value; //必须自己声明一个,否则连接时出错;
static CA ao; //可以定义个静态对象,这个对象可以在其他模块用extern 声明,然后调用它的这个value,用其他的会连接错误;
void func(){
static CA ai; //这个和外面那个一样,也只能在其他模块用来做static成员的作用域分辨;