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数据成员,只是声明了在那占个空;编译器不对类内部静态数据成员分配空间; 你要用的话还得自己去声明一个全局静态变量; 静态数据成员不论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成员的作用域分辨; } |