点击这里给我发消息 点击这里给我发消息

static关键字在C和C++的区别

添加时间:2013-12-7
    相关阅读: 设计 程序 C++
副标题#e#

    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成员的作用域分辨;

 

相关static关键字在C和C++的区别

咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册