• 1、什么是const?

    const就是constant的缩写,意思是“恒定不变的”,它是定义只读变量的关键字,或者说const是定义常变量的关键字,常类型的变量或对象的值是不能被更新的

  • 2、为什么引入const?

    const推出的初始目的,就是为了取代预编译指令,消除它的缺点,同时继承它的优点

  • 3、const有什么主要的作用?

    (1)可以定义const常量,具有不可变性。例如:const int MAX = 100; int array[MAX];

    (2)便于进行类型检查,使编译器对处理内容有更多了解,以消除一些隐患

        例如:void f(const int i) {......}编译器就会知道 i 是一个常量,不允许修改。

    (3)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。还是上面例子,如果在函数体内修改了 i ,编译器就会报错

        例如:void f(const int i){ i = 1001;} error!

    (4)为函数重载提供了一个参考

class A
{
  void f(int i) { ...... }  //一个函数
  void f(int i) const { ...... }  //上一个函数的重载.....
};

    (5)提高了效率。 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

  • 4、const的使用

  const在实际中用得并不多,先列出如下const短小总结,const关键字修饰指针,const在*号的左边还是右边(左定值,右定向)

1.const int a;      //a是一个常整形数
2.int const a;      //a是一个常整形数
3.const int *a;      //a是一个指向常整数型的指针(整形数是不可修改的,但指针可以)
4.int const *a;      //a是一个指向常整数型的指针(同上)
5.int *const a;      //a是一个指向整形数的常指针(指针保存内容不可修改)
6.int const * const a;  //a是一个指向常整形数的常指针(指针指向的整形数是不可修改的,同时指针也是不可修改的)

  (1)int const * ;

    int const *a 和 const int *a意义一样。

    从右往左看,进行解析,这个a是一个指针,而且是一个常量,类型是整形,称为指针常量

    特点:*a指向一个整形的常量,但是不能通过修改p所指向内存单元的值,只能通过修改其所指向的对象,可称为指向常整形的指针

int data = 88;
const int number = 99;
const int *p1 = &number; p1 = &data; //允许通过编译,允许修改所指向的对象
*p1 = 10086;   //不允许通过编译,无法通过指针修改内容

  (2)int * const  a;

    从右往左看,一个常量a被定义为整形指针。可称为指向整形的常指针

    特点:常量a是一个整型类型的指针,它能通过指针来进行修改其中的内容,但当它已经指向一个地址之后,便不能再指向其他地址,和int const*有区别

int data = 88;
int k = 99;
int * const p2 = &data; *p2 = 10010;  //允许通过编译,允许通过指针修改内容;
p2 = &k;     //不允许通过编译,无法修改所指向的对象;

  (3)const int * const p;

    从右往左看,结合上面两个,可以看做常量指针常量,即常量p是一个整形的指针,而且这个指针还是个常量

int data = 88;
int k = 99;
int const * const p3 = &data; p3 = &k;    //不允许通过编译
*p3 = 4399;  //不允许通过编译

const修饰符总结的更多相关文章

  1. C++中 容易忽视的const 修饰符

    C++可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的有点: (1)const常量有数据类型,而宏常量没有数据类型.编译器可以对const进行类型安全检查,而后者只进行 ...

  2. [Reprint]C++函数前和函数后加const修饰符区别

    c++中关于const的用法有很多,const既可以修饰变量,也可以函数,不同的环境下,是有不同的含义.今天来讲讲const加在函数前和函数后面的区别.比如: 01 #include<iostr ...

  3. C++函数前和函数后加const修饰符区别

    class Test(){ public: Test(){} const int foo(int a); const int foo(int a) const; }; 一.概念 当const在函数名前 ...

  4. [C++]const修饰符

    Date: 2014-1-1 Summary: const 修饰符笔记 Contents: 1.const 修饰符 声明一个常量数据类型 , 在编译时就确定数据类型 2.const 与 指针 一般情况 ...

  5. C/C++ 中 const 修饰符用法总结

    C/C++ 中 const 修饰符用法总结 在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家 ...

  6. const修饰符与函数

    一.用const修饰函数的参数 函数参数类型前加const指明该参数为常量,在函数内部不可改变. void func(const int x) { //x不可以在内部进行赋值等操作. } 注:当参数为 ...

  7. const修饰符限定的常量

    类型前加const修饰符限定变量为只读,称为常量,定义时必须初始化,且初始化后编译器不允许再修改常量的值. 一.常量的定义 const在类型前面 const int value: //value是co ...

  8. [原创] 基础中的基础(二):C/C++ 中 const 修饰符用法总结

    在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家梳理一下知识,给大家一点点帮助.作者是菜鸟一 ...

  9. 转载----C/C++ 中 const 修饰符用法总结

    感谢原创作者,写的好详细.不忍错过,所以转载过来了... 原文地址: https://www.cnblogs.com/icemoon1987/p/3320326.html 在这篇文章中,我总结了一些C ...

  10. C++ c++与C语言的区别(三目运算符,const修饰符)

    //区别⑦:三目运算符(C++版本) #include<iostream> using namespace std; //三目运算符 C语言返回变量的值 C++语言是返回变量本身 void ...

随机推荐

  1. node开启 https线上服务你不会吗?

    var https=require("https");//https服务var fs = require("fs")var express = require( ...

  2. SAP MM- BAPI_PO_CHANGE 更新PO version 信息(version management)

    目的 Version 信息的Complated 字段,自动打勾 实例程序 *&--------------------------------------------------------- ...

  3. SAP BOM 读取

    1.查找 物料号.工厂.物料描述. 表:MARA MARC MAKT 逻辑: 输入物料(选择选项)中的物料编号(MARA-MATNR)和                       输入工厂(选择选项 ...

  4. SQL语句的整理

    mysql语句的整理 1.SQL DML 和 DDL 可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL). SQL (结构化查询语言)是用于执行查询的语法.但是 SQ ...

  5. mysql中in的用法详解

    一.基础用法 mysql中in常用于where表达式中,其作用是查询某个范围内的数据. select * from where field in (value1,value2,value3,-) 当 ...

  6. docker 部署 minio

    1.下载镜像 docker pull minio/minio 2.启动 docker run -p 9000:9000 --name minio \ -d --restart=always \ -e ...

  7. 配置Apollo阿波罗.net core 3.1 c#

    直接上代码: public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(a ...

  8. NC16660 [NOIP2004]FBI树

    NC16660 [NOIP2004]FBI树 题目 题目描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全&quo ...

  9. Sentinel-流量防卫兵

    1.背景 1.1 简介 Sentinel 以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度保护服务的稳定性. Sentinel 具有以下特征 丰富的应用场景:Sentinel 承接了阿里巴 ...

  10. docker for window WSL 2 installation is incomplete 错误,导致docker无法启动

    1.错误截图如下: 2.错误原因:由于wsl2版本旧,根据提示让我们手动更新包,去微软官网下载最新wsl2后,安装完成重启即可解决. 3.下载地址:download地址