网站制作的建设大纲ppt,成都广告设计,国家超算互联网公司排名,网站网页不对称文章目录什么是 const 常量限定符const 的初始化const 的默认作用域const 的引用例外情况const 与指针const指针的声明指向 const 的指针const指针指向 const 的 const指针什么是 const 常量限定符 Q#xff1a;什么是 const 常量限定符#xff1f; A#xff1a;const名叫常…
文章目录什么是 const 常量限定符const 的初始化const 的默认作用域const 的引用例外情况const 与指针const指针的声明指向 const 的指针const指针指向 const 的 const指针什么是 const 常量限定符 Q什么是 const 常量限定符 Aconst名叫常量限定符用来限定特定变量以通知编译器该变量是不可修改的。习惯性的使用const可以避免在函数中对某些不应修改的变量造成可能的改动。
const 的初始化
const用来修饰变量的值时变量的值不可改变。举个例子一天有24个小时不会变成别的数字我们就可以在程序中这样定义时间。 const int hour 24; //24小时这样操作以后hour就变成了一个常量任何试图对hour的赋值操作都是错误的。 hour 10; //错误因为const类型一旦创建它的值就无法进行更改所以const对象必须进行初始化。 const int i get_line(); //正确const int j 1; //正确const int k; //错误const 的默认作用域
const修饰的常变量默认仅在本文件内有效。 按照上面的例子来讲编译器在编译时会默认将hour用24进行替换。要做到这一点在编译时编译器需要知道常变量的初始值。当程序源文件很多时在每一文件中都需要访问到常变量的初始值为了做到这一点每一个源文件中都需要有对常变量的定义但是这样会导致对一个变量的重复定义。为了解决这个矛盾我们约定常变量的默认作用域仅限于本文件这相当于在不同的文件中定义了多个独立的同名变量。 如果想在多个文件中使用同一个常变量可以通过在常变量前面添加extern关键字来解决这样常变量就只用定义一次就可以了。 extern const int hour 24; //24小时const 的引用 Q什么是对常量的引用 A可以把引用绑定到const对象上就像绑定到其他对象上一样这就是对常量的引用。与普通引用不同的是对常量的引用不能被用于修改它所绑定的对象。
const int ci 1024;
const int r1 ci; // 正确
r1 42; // 错误
int r2 ci; // 错误
因为r1是对常量的引用不能赋值所以不正确。 因为r2是一个非常量引用指向一个常量对象所以不正确。
例外情况
上面我们讲了引用的类型必须和所引用的对象的类型一致但是有两个例外。
其中一种例外情况是初始化常量引用时允许用任意表达式作为初始值只要该表达式的结果能转换成引用的类型即可。允许为一个常量引用绑定非常量的对象、字面值甚至是个一般表达式。 第二种例外情况是对const的引用可能引用一个并非const的对象。常量引用仅对引用可参与的操作做出了限定对于引用的对象本身是不是一个常量未作限定。因为对象也可能是个非常量所以允许通过其他途径改变它的值。
const 与指针
const指针必须初始化一旦初始化完成则它的值就不能再改变了。
const指针的声明
在声明指针时可以在类型的前或者后或者前后使用关键字 conat他们的含义都不同。 const int *p1 // 指向整形常量的指针它指向的值不能修改。int * const p2 // 指向整形的常量指针它不能再指向别的变量但指向变量的值可以修改。const int * const p3 // 指向整形常量的常量指针。它既不能再指向别的常量指向的值也不能修改。指向 const 的指针
首先指向整形常量的指针是一个指针这个指针是指向一个const 类型的指针。 const int *p1 // 指向整形常量的指针它指向的值不能修改。int const * p2 // 指向整形的常量指针它指向的值不能修改。这种的特点是地址可以随便指但是地址里面保存的值却是不能改变。
const指针
首先const指针是一个指针这个指针是const类型的也就是这个指针变量的地址不能变一直指向这个地址地址所被保存的内容是可变的。 int * const p2 // 指向整形的常量指针它不能再指向别的变量但指向变量的值可以修改。指向 const 的 const指针 const int * const p3 // 指向整形常量的常量指针。它既不能再指向别的常量指向的值也不能修改。指针前面有const进行修饰这个指针p3就是一个指针常量所以指针的地址就被固定了只能进行初始化。 而对于 *p3 而言前面又有const进行修饰所以*p 就是一个常量了也就是p指向地址地址上保存的数据是一个常量不能被改变的。