一、const是什么

const是C/C++中的类型修饰符。

二、const的作用

1、对变量声明只读特性,保护变量值以防被修改。

2、节省空间,避免不必要的内存分配。const修饰的变量在程序运行过程中只有一份拷贝。

3、提高程序运行效率。编译器不为普通const常量分配存储空间,而是将他们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储和读取内存的操作。

三、const的使用

1、const和普通变量

(1)编译器在编译过程中把用到const变量的地方都替换成对应的值。为了执行这个操作,编译器必须知道const变量的初始值, 如果程序包含多个文件,则每个用了该const变量的文件,都必须能访问到它的初始值才行,要做到这一点,就必须在每一个用到该const变量的文件中都有对它的定义或声明。

默认状态下,const变量仅在文件内有效,当多个文件中出现了同名的const变量时,等同于在不同文件中分别定义了独立的const变量

定义一个const变量

const type value_name = value;

(2)对于有必要在文件间共享的const变量,在const变量定义和声明时添加extern关键字即可。

例如:

在test_extern_const.cpp中定义并初始化一个可被外部访问的const变量

extern const int test_extern_const = 0;

在test_extern_const.h中声明变量extern_const_test和函数print_test_extern_const_value

#ifndef _TEST_EXTERN_CONST_H

#define _TEST_EXTERN_CONST_H

extern const int test_extern_const;

#endif

在main.cpp中使用变量test_extern_const

#include

#include "test_extern_const.h"

using namespace std;

int main() {

cout<<"test_extern_const value is "<

return 0;

}

从main的运行结果可以看到,const变量test_extern_const被外部文件成功访问

2、const和引用

把引用绑定到const变量上,称为对常量的引用。与普通引用不同的是,对常量的引用不能修改它绑定的变量的值。

常量引用仅对引用可参与的操作做出了限定,对于引用的变量本身是不是一个常量未做限定。

const int test_const = 0;

const int &reference_to_const = test_const;

3、const和指针

(1)指向常量的指针

指向常量的指针没有规定其所指向的变量必须是一个常量。指向常量的指针仅仅要求不能通过该指针改变变量的值。

const double value_name_1 = value;

const double *pointer_to_const_1 = &value_name_1;

double value_name_2 = value;

const double *pointer_to_const_2 = &value_name_2;

(2)常量指针

指针本身为常量,常量指针必须初始化,一旦初始化完成,它的值就不能再改变了。即不变的是指针本身的值而非指向的那个值。

int value_name = value;

int *const const_pointer = &value_name;