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. .NET COM+级别的事务Transaction实现

    参考: https://docs.microsoft.com/zh-cn/dotnet/api/system.enterpriseservices.contextutil?view=netframew ...

  2. Spring Boot 中使用 spring-boot-devtools (使用 Gradle 作为构建工具)

    Spring Boot 中使用 spring-boot-devtools (使用 Gradle 作为构建工具) 本文使用 Gradle 作为构建工具,关于 Gradle 构建工具,可以理解为是 Mav ...

  3. 深入理解JVM虚拟机1:JVM内存的结构与消失的永久代

    本文转自互联网,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutori ...

  4. fedora18 You might need to install dependency packages for libxcb.

    22 down vote The page Qt for X11 Requirements lists some packages required to build Qt on Debian. Th ...

  5. 移动端续讲及zepto移动端插件外加touch插件介绍

    媒体查询:针对不同设备,显示不同的样式. 设备像素比:dpr  device-piexl-ratio 在he开发中,要一个3陪高清图片: 1080>=320*3 (主要是为了解决图片的失真问题) ...

  6. CentOS7 日常操作 2

    常用命令 文件与目录操作 命令 解析 cd /home 进入 ‘/home’ 目录 cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd - 返回上次所在目录 cp file1 file ...

  7. Delphi XE2 之 FireMonkey 入门(8) - TImage

    TImage 主要成员: { 属性 } Bitmap              : TBitmap;        //图像 BitmapMargins        : TBounds;      ...

  8. [USACO 2008 Jan. Silver]架设电话线 —— 最短路+二分

    一道图论的最短路题.一开始连最短路都没想到,可能是做的题太少了吧,完全没有思路. 题目大意: FJ的农场周围分布着N根电话线杆,任意两根电话线杆间都没有电话线相连.一共P对电话线杆间可以拉电话线,第i ...

  9. 关于this在不同使用情况表示的含义

    1. addEventListener   函数中的this 指向的是出发事件的事件源 obj.addEventListener('click',function(){ console.log(thi ...

  10. xshell输入字母空格间距变大

    按一下shift+空格(全角/半角转换的快捷键,引起的问题)