C++ 中const总结 const 限定符把一个对象转换成一个常量,如 const int bufSize=512; 申 明 bufSize 的时候,如果不将它初始化,那么编译器会报错:const object must be initialized if not extern。因为 bufSize 被 const 限定符限制,如果不在 申明 bufSize 的时候给它赋值,就不能再给它赋值(因为常量在定义之后就不能 被修改),它就没有任何意义了。 下面将详细的讨论一下 const 变量的作
const限定符
const是一种限定符,被const所限定的变量其值不可以被改变。
const的初始化
由于const一旦创建其值就不能够被改变,所以我们必须对其进行初始化
const int a;//错误,const变量必须进行初始化!
const int b=10;//正确,编译时初始化
const int c=get_size();//正确,运行时初始化
相同类型的变量相互初始化时,不论变量是否被const限定我们都可以进行随意的相互拷贝。因为在拷贝过程中我们只会用到等式右边变量的右值
const引用是指向const对象的引用。 代码如下: const int i = 10; const int &ref = i; 可以读取ref,但不能修改。这样做是有意义的,因为i本身就不可修改,当然也不能通过ref来修改了。所以也就有将const变量赋值给非const引用是非法的。 代码如下: int &ref1 = i; // error: nonconst reference to a const object 非const引用是指向非const类型变量的引用。 const引用
const对象默认为文件的局部变量,与其他变量不同,除非特别说明,在全局作用域的const变量时定义该对象的文件局部变量。此变量只存在于那个文件中中,不能别其他文件访问。要是const变量能在其他文件中访问,必须显示的指定extern(c中也是)
当你只在定义该const常量的文件中使用该常量时,c++不给你的const常量分配空间–这也是c++的一种优化措施,没有必要浪费内存空间来存储一个常量,此时const int c = 0;相当于#define c 0;
当在当前文件之外使用
当在C源代码文件中将变量声明为const时,可以通过以下方式实现:
const int i = 2;
然后,可以在另一个模块中使用此变量,如下表示:
extern const int i;
但若要获取与 C++ 中相同的行为,则必须将 const 变量声明为:
extern const int i = 2;
如果希望在 C++ 源代码文件声明用于 C 源代码文件的 extern 变量,请使用:
extern "C" const int x = 10;
以防止 C++ 编译器进行名