C++常量

来源:互联网 发布:室内定位常用算法 编辑:程序博客网 时间:2024/06/07 02:28

    在C语言中,常量一般是通过预处理器建立宏来进行文本替代的。如下面代码:


#define BUFSIZE 100


    这中间没有类型检查功能,而且替代是发生在编译阶段,编译器通过把程序里的所有BUFSIZE来用100替代,并且在这期间,它不占用存储空间。在C++中,完全可以用const取代#define。

    C++中const默认为内部连接,意思是const仅在const被定义的文件里才是可见的,不能被其他的编译单元看到。当定义一个const时,必须赋一个值给它。除非用了extern做出了清楚说明。通常C++编译器并不为const创建存储空间,在这种情况下,const的作用和#define是一样的。但是如果有几个不同的编译单元都要引用它,那么编译器就会给它分配存储空间。

    const可以用于集合,在这种情况下编译器必须为const分配内存。此时的const意味着“不能改变的一块存储空间”。如下面代码:


    C++中的const默认为内部连接,所以不能在一个文件中定义一个const,而在另外一个文件中又把它作为extern来引用。为了使const成为外部连接以便让另外一个文件可以对它引用,必须明确把它定义为extern,像下面这样:

 

extern const int x = 1;

 

    在这种情况下,我们强迫给它分配内存(编译器在这里依然可以选择常量折叠),如果要在另外的文件中使用这个常量x,就在该文件中进行声明,如下

 

extern const int x;

 

    这句代表x在别处进行了定义。初始化把定义和声明区分开。