• 变量声明和定义及extern、static、const


    1. 声明与定义的区别

        一般来说我们把分配变量(函数)地址和存储空间的称为定义,不分配地址的称为声明。声明只是告诉编译器,有这个变量(函数),具体在哪里让它自己去找对同一个变量(函数)的声明可以有多次,而定义只能有一次!所有头文件中一般都是变量(函数)的声明,头文件中一般都是变量(函数)的声明定义(const修饰的变量除外)。

    2. extern

            extern有两个作用。

            第一个,与"C"一起连用,如: 

    extern "C" void fun(int a, int b); 

            告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的, C++的规则在翻译这个函数名时会把fun这个名字变得面目全非,可能是fun@aBc_int_int#%$也可能是别的,这取决于编译的规则,主要是为了支持函数重载。

           第二个, 置于变量(函数)名前,如:

     extern int nExistValue; 

           告诉编译器,其后的变量(函数)已经在其他地方中被定义了,并且把该变量(函数)的作用域扩展到该语句所在的作用域。 

    注意:当变量带初始化式时,就算前面有extent,也是一个定义。即extent相当于没有。

    3.static

            static修饰变量时,告诉编译器,该变量保存在内存的静态区。即便函数运行结束,而静态变量的值都不会被销毁,以后仍然还可以继续使用。未指定初始值的静态变量会被程序自动初始化为0。

            static修饰的函数和变量都只能在本编译单元中使用。

    注意:static与extern“水火不容”,也就是说extern和static不能同时修饰一个变量。

    4.const

            const修饰的变量在定义时必须被初始化,其后不能被修改。const最初是用来代替define的。define是宏定义,在预编译期简单的替换,不会进行类型检查,而且define没作用域的限制。const修饰的是一个不能被修改的变量,本质上还是一个变量,会进行类型检查,也有作用域的限制。

            在类的成员函数中,可用const修饰函数,如:

    class classname { 
     public: 
      int fun() const; 
     ..... 
    } 

           表示该函数不会修改该类的成员变量。

    作者:xiaoxibo 发表于2011-7-24 1:47:38 原文链接
    阅读:51 评论:0 查看评论
  • 相关阅读:
    语料和文本处理
    seq2seq+torch7聊天机器人bug处理
    unity3d inputfield标签控制台打印object
    多种语言tcp编程
    处理json中的空格
    安卓无法访问Azure服务器和微软API
    Xamarin/Unity3d无法访问Azure服务器或者微软API
    unity3d C# soket客户端接受失败
    unity3d之public变量引发错误
    unity3d,java,c#,python,rospy的socket通信测试
  • 原文地址:https://www.cnblogs.com/xiaoxibo/p/2212611.html
Copyright © 2020-2023  润新知