const的限定

const对象一旦创建后,其值就不可以改变,所以const对象必须初始化。与非const的类型比较,主要区别在于const类型对象执行但是不改变其操作内容。

在默认状态下,const只在文件内有效。在默认状况下,const定义的对象仅限定在文件类起作用,当多个文件中出现了同名的const时其实等同于在不同文件中分别定义了独立的变量。于是我们只在一个文件中定义const对象,而在其他文件中仅仅声明就可以。对于const对象不管是声明还是定义都加extern关键字,这样只需要定义一次就可以了。如下:

//在file1.h文件里面定义i

extern const int i=3;    //将i定义为常量3

//在file2.h中引用i时只要声明就可以,避免重定义

extern const int i;

int a=i;   //这样就可以使用i了

const的引用被称为对常量的引用(reference to const),引用类型必须与其所引用的对象保持一致,但是在这里有两个例外,第一个例外是在初始化常量引用时允许用任意表达式作为初始值。允许为一个常量引用绑定非常量对象,字面值,甚至是一个表达式:

int i=42;

const int &r1=i;    //正确,此时r1与i绑定

const int &r2=42;  // 正确,此时绑定一个字面值42

const int &r3=r1*2;  //正确,r3是一个常量引用,绑定字面值84

int &r4=42;    //错误,非常量引用不可绑定字面值

时间: 2024-11-03 21:43:20

const的限定的相关文章

C++ const 限定符

#include<stdlib.h> #include<iostream> int MAX(const int a, const int b); /* * const限定符: * 1. 定义:限定一个变量不允许被改变,产生静态作用 * 2. 分类: * (1) 顶层const:限定变量本身不可改变 * 例: const int number; * int *const pointer; * * (2) 底层const:限定变量所指向的对象不可改变,所有的引用都是底层const *

C++ const与define

昨日面试被组考官问及const与define异同,开始还简单,后来被问的我脑袋是一团浆糊.今日差点资料总结一下 1. const与define. 两者都可以用来定义常量,但是const定义时,定义了常量的类型,所以更精确一些.#define只是简单的文本替换,除了可以定义常量外,还可以用来定义一些简单的函数,有点类似内置函数.const和define定义的常量可以放在头文件里面.(小注:可以多次声明,但只能定义一次) 2. const与指针和引用. (a)const与指针. 先来看看下面的几种定

详解C和C++中的const关键字

在讲下面的内容之前,要先看看这篇文章const.static变量的存储位置 一.C中的const 作用:(1)可以定义const常量,具有不可变性. (2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患. (3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改. 同宏定义一样,可以做到不变则已,一变都变! (4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性. 还是上面的例子,如果在函数体内修改了i,编译器就会报错: (5) 可以节省空间,避免不必要的内存

const与define的异同

1.>>const与define.两者都可以用来定义常量,但是const定义时,定义了常量的类型,所以更精确一些.#define只是简单的文本替换,除了可以定义常量外,还可以用来定义一些简单的函数,有点类似内置函数.const和define定义的常量可以放在头文件里面.(小注:可以多次声明,但只能定义一次) 2.>>const与指针和引用. (a)const与指针. 先来看看下面的几种定义: int me: const int * p1=&me://p1可变,*p1不可变,

关于Const用法详解

const 1. 限定符声明变量只能被读   const int i=5;   int j=0;   ...   i=j;  //非法,导致编译错误   j=i;  //合法 2. 必须初始化   const int i=5;    //合法   const int j;      //非法,导致编译错误

C++学习之const整理总结

1什么是const? (const类型)常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的.(但可以偷梁换柱进行更新) 2为什么引入const? const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点. 3主要作用 (1)可以定义const常量,具有不可变性. 例如:const int Max=100; int Array[Max]; (2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患. 例如: void f(cons

extern &amp; const

extern  声明变量  为了被用来多文件共享同一变量 声明时赋值  等同于定义  就没有实际意义了 extern变量 表示该变量应该先去其他文件中搜索其定义  然后共享 文件件共享变量:首先要包含相关头文件  源文件中定义  当前文件extern声明即可 const 对象必须初始化 可用表达式 可普通变量初始化    使用过程中 编译器会找到const变量初始值做替换  所以const被限定为文件中有效 但要文多件共享也是可以的  方法:声明和定义都添加extern关键字   其他的同一般变

C语言 const常量讲解

//const的本质 //const本质上是伪常量,无法用于数组初始化以及全局变量初始化 //原因在于const仅仅限定变量无法直接赋值,但是却可以通过指针间接赋值 //例如局部常量在栈区,而不在静态区(静态区会一直存在),也不在代码区(代码区只读,禁止修改) #include<stdio.h> #include<stdlib.h> //const与define的区别 #define X 10.0 const int Y = 9.0;//赋值时会自动数据类型转换 //const是有

const 用法详解

const用法详解 面向对象是C++的重要特性. 但是c++在c的基础上新增加的几点优化也是很耀眼的 就const直接可以取代c中的#define 以下几点很重要,学不好后果也也很严重 const 1. 限定符声明变量只能被读 const int i=5; int j=0; ... i=j;   //非法,导致编译错误 j=i;   //合法 2. 必须初始化 const int i=5;    //合法 const int j;      //非法,导致编译错误 3. 在另一连接文件中引用co