const 表示常类型
 
作用:
1、具有不可变性。
 
2、可以很方便对参数进行调整和修改,和宏定义一样,不变则已,变都变。
 
3、保护被修饰的东西,防止被意外修改。(如:在修饰函数的形参时,加const可以保证参数的值不被改变)
 
4、为函数重载提供参考。
 
5、节省空间,避免不必要的内存分配。(如:宏定义是立即数,会分配多次内存,因此有多个复制;const在内存只有一份复制)
 
6、提高程序效率,编译器通常不为普通的const常量分配内存,而是存在符号表中,就没有存储和读内存的操作。
 
使用场景:(以int为例)
1、修饰一般常量,此时const可以在int前或者int后。
 
2、修饰常数组,此时const可以在int前或者int后。
const int a[] = {1,2};
int const a[ ] = {1,2};
 
3、修饰常对象,此时const可以在class前或者class 后。
 
4、修饰常指针。
const int *a; // 修饰指向的对象,a可以变,a指向的内容不能变
int const *a; // 修饰指向的对象,a可以变,a指向的内容不能变
int *const a; // 修饰a指针,a不可变,a指向的对象可变
const int *const a; // a及其指向的对象都不能变
 
5、修饰常引用。
const int &s;
6、修饰函数的常参数。
void fun(int const a){}
 
7、修饰类的成员函数。
 
8、修饰函数的返回值。
 
 
常引用:
目的:避免在毫不知情的情况下改变了变量的值。
 
引用的初始化:
1、是左值(左值就是可以放在等号左边的值,是一个地址),可以。
2、不是左值,只能对常引用赋值,而且赋值的过程是:将值隐式转换到类型T,放在一个临时变量中,再将这个临时变量来初始化这个常引用。
 
double & dr = 1; // 错,非常引用只能用左值来初始化
const double & dr = 1; // 对,相当于double temp = double(1); const double & dr = temp;
 
因为临时变量是const 类型,第一个表达式相当于将试图将一个const类型转化为非const类型,所以错了。
总之,引用型参数能被定义为const就定义为const。
 
个人博客地址:https://huahua462.github.io/

const类型总结的更多相关文章

  1. 临时变量不能作为非const类型引用形参的实参

    摘要:     非const 引用形参只能与完全同类型的非const对象关联.      具体含义为:(1)不能用const类型的对象传递给非const引用形参:                  ( ...

  2. C++中常函数内部的this指针也是const类型的

    代码中碰到一个奇怪的现象,在同样的函数中调用this指针,结果却有一个无法通过编译 // 读取连接信息 void ThirdWizardPage::ReadConnection() { QFile f ...

  3. C++ static、const和static const类型成员变量声明以及初始化

    C++ static.const和static const 以及它们的初始化 const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. sta ...

  4. C2678 二进制“<”: 没有找到接受“const ***”类型的左操作数的运算符解决办法

    正确代码如下:#include<iostream> #include<string> #include<map> using namespace std; /*仿函 ...

  5. const变量指针赋值给非const类型的指针运行结果

    在c++可以定义一个const变量,然后把变量的值赋给一个非const指针,可以通过指针来改变const变量的值吗?下面的截图给出了答案

  6. 【C++】const,static和static const类型成员变量声明及其初始化

    1)const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间 void f1() { ; cout<<x<<endl; ...

  7. C++:常类型Const

    常类型:使用类型修饰符const说明的类型,常类型的变量或对象成员的值在程序运行期间是不可改变的. 3.10.1 常引用 如果在说明引用时用const修饰,则被说明的引用为常引用.如果用常引用做形参, ...

  8. C++ 常量类型 const 详解

    1.什么是const? 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的.(当然,我们可以偷梁换柱进行更新:) 2.为什么引入const? const 推出的初始目的 ...

  9. const常量类型

    1.定义:const常量类型表示一个”常值变量“,其值是不能被修改的变量.即一旦变量被声明为const类型,编译器将禁止任何试图修改该变量的操作. 2.声明:const <声明数据类型> ...

随机推荐

  1. 170829-关于AOP面向切面编程

    1.AOP概念:Aspect Oriented Programming 面向切面编程 2.作用:本质上来说是一种简化代码的方式 继承机制 封装方法 动态代理  …… 3.情景举例 ①数学计算器接口[M ...

  2. 个推安卓推送SDK集成步骤详解

    以下是一位开发者在集成个推安卓推送SDK时候的亲身经历: 作者:吃饱了想睡. 概述 公司准备采用个推作为第三方推送平台,我作为客户端的头号小鸟,掐指一算已经毕业 0.1 年了,Leader 准备把这个 ...

  3. uniapp开发

    问题1:去掉导航条 给一个单独的页面隐藏顶部的 导航栏 可以在pages.json里 单独的路由style下面配置  "app-plus": {"titleNView&q ...

  4. Solr集群环境搭建

    一.准备工作 首先保证已经安装JDK工具包: [root@localhost opt]# java -version java version "1.8.0_144" Java(T ...

  5. k8s上的基础概念和术语

    kubernetes基本概念和术语   kubeernetes中的大部分概念如Node,Pod,Replication Controller ,Serverce等都可以看作一种“资源对象”,几乎所有的 ...

  6. Hyperledger交易流程

    Hyperledger Fabric Network中的角色 在Hyperledger中,由三种类型的角色: Client:应用客户端,用于将终端用户的交易请求发送到区块链网络: Peers:负责维护 ...

  7. windows下数据库备份bat

    @echo offset "Ymd=%date:~,4%%date:~5,2%%date:~8,2%"C:/mysql/bin/mysqldump --opt -u root -- ...

  8. 图像bayer格式介绍【转】

    本文转载自:http://www.cnblogs.com/whw19818/p/6223143.html 1 图像bayer格式介绍 bayer格式图片是伊士曼·柯达公司科学家Bryce Bayer发 ...

  9. Python 笔试集:什么时候 i = i + 1 并不等于 i += 1?

    ​​增强型赋值语句是经常被使用到的,因为从各种学习渠道中,我们能够得知 i += 1 的效率往往要比 i = i + 1 更高一些(这里以 += 为例,实际上增强型赋值语句不仅限于此).所以我们会乐此 ...

  10. webpack构建项目连接本机IP仍无法访问问题

    通过连接IP地址,确定连接成功后仍无法访问本机运行项目,需要对项目配置进行修改,有两种情况: 第一种是在config/index.js,把module.exports={}中找到 host:'loca ...