Paul_xxb

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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 查看评论
posted on 2011-07-24 01:48  Paul_xxb  阅读(866)  评论(0编辑  收藏  举报