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. 整合spring cloud云架构 - 根据token获取用户信息

    根据用户token获取yoghurt信息的流程: /** * 根据token获取用户信息 * @param accessToken * @return * @throws Exception */ @ ...

  2. UE4联网测试的快捷方法

    工程中测试 创建bat文件,格式如下: UE4Editor.exe路径 工程文件名 [地图名及参数] -game [其他自定义参数] UE4Editor.exe路径表示虚幻编辑器相应版本的UE4Edi ...

  3. 学习wavenet_vocoder之环境配置

    WaveNet vocoder位于github的位置,https://github.com/r9y9/wavenet_vocoder 一.配置时的环境 操作系统:win10 python环境工具:An ...

  4. [CSP-S模拟测试]:导弹袭击(数学+凸包+单调栈)

    题目背景 $Guess$准备向敌军阵地发起进攻了!$Guess$的武器是自动制导导弹.然而在机房是不允许游戏的,所以班长$XZY$对游戏界面进行了降维打击,结果... 题目描述 众所周知,环境因素对导 ...

  5. VXcode学习

    1.安装中文包(chinese) 2.打开控制面板ctrl+shift+p

  6. EventBus和Otto第三方构架

    代码 添加依赖:implementation 'org.greenrobot:eventbus:3.0.0'1注册并声明订阅者,然后发布事件最后解除注册 @Override protected voi ...

  7. optistruct线性求解一次二次单元应力位移比较

    通过分析比较10mm.5mm.3mm.1mm的网格模型, 网格越细密: 位移与应力均趋于恒定值(收敛): 一次与二次单元的应力区域一致: 一次与二次单元的位移相差11.3%,一次单元的位移小. 所用的 ...

  8. MySQL高可用架构之MySQL5.7组复制MGR

    MySQL高可用架构之MySQL5.7组复制MGR########################################################################### ...

  9. 爱好-超级IP:超级IP

    ylbtech-爱好-超级IP:超级IP  IP,是Intellectual Property的缩写,字面粗译为“知识产权”,特指具有长期生命力和商业价值的跨媒介内容运营.一个具有可开发价值的真正的I ...

  10. PHP模拟请求和操作响应

    模拟请求 fsockopen <?php // 建立连接 $link = fsockopen('localhost', '80'); define('CRLF', "\r\n" ...