总结const
int b;
const int *a=&b;
int const * a=&b;
int * const a =&b;
const int *const a=&b;
前两种都是一样的效果,都表示指针指向常量,*a=10这样做是不可的,因为指向的是一个常量,但是我们有两种方式改变*a的值
(1)b=10,我们通过改变过b的值(右值)
(2)int c=10
a=&c
让指针指向别的变量,毕竟指针不是常量,指针可以改变指向
第三种表示指针是一个常量,指针不能变,但是指针指向的值可以改变
int *const a=5;
*a=10 可以
a++不可以,指针不可以改
第四种都不可以改变
const int *a;
int * const a;
第一种是可以的,常量需要初始化,变量可以不初始化,第一种,a是变量,他是一个int *类型的,而*a是不可改变的,是变量,所以第一种是正确的
第二种不可以,因为第二是说的是指针是常量,而a就是指针,是常量,所以不可以不初始化
如果一个函数最后加上const,表示这个函数里面不能对成员变量进行修改,也就是说是一个只读函数,内部也不能调用与改变过成员函数有关的函数,只能调用只读函数,但是如果在只读函数中想要改变过成员函数,可以在是定义成员函数的时候加上mutable
*********************************************************************************************
1:const可以用于定义常量,上面
2:可以进行类型数据监测
3:可以保护不能修改的东西,增强健壮性
4:方便一键替换
5:为函数重载提供条件(void fun(),,,void fun() const)
6:节省空间,避免不必要的浪费,const常量从汇编的角度来说只是给出内存地址,就一分拷贝,而#define给出的是立即数,是多份拷贝
7:提高效率,编译器通过不为const分配内存,只是放在符号表中,避免了读取内存造成的浪费
********************************************************************************************
const修饰的类对象,任何对象都不能改,只能调用const成员函数
*****************************************************************************************
将const转为非const的方法
采用const_cast 进行转换。
用法:const_cast <type_id> (expression)
该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。
- 常量指针被转化成非常量指针,并且仍然指向原来的对象;
- 常量引用被转换成非常量引用,并且仍然指向原来的对象;
- 常量对象被转换成非常量对象。
**********************************************************************************************************************
补充:
如果在非const成员函数中,this指针只是一个类类型的;如果在const成员函数中,this指针是一个const类类型的;如果在volatile成员函数中,this指针就是一个volatile类类型的。
new返回的指针必须是const类型的。
*********************************************************************************************
const和define区别
1:const有数据类型,宏常量没有数据类型,编译器对前可以进行安全检查,对后者只是简单的替换,不检查
2:有些集成的调式工具可以对const进行调试,对宏不调式,在c++中,const已经完全取代了宏
总结const的更多相关文章
- openssl 1.1.1 reference
openssl 1.1.1 include/openssl aes.h: # define HEADER_AES_H aes.h: # define AES_ENCRYPT 1 aes.h: # de ...
- const,static,extern 简介
const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...
- C++中的const
一,C++中const的基本知识 1.C++中const的基本概念 1.const是定义常量的关键字,表示只读,不可以修改. 2.const在定义常量的时候必须要初始化,否则报错,因为常量无法修改,只 ...
- const extern static 终极指南
const extern static 终极指南 不管是从事哪种语言的开发工作,const extern static 这三个关键字的用法和原理都是我们必须明白的.本文将对此做出非常详细的讲解. co ...
- const let,console.log('a',a)跟console.log('a'+a)的区别
const 创建一个只读的常量 let块级作用域 const let重复赋值都会报错 console.log('a',a) a console.log('a'+a) a2 逗号的值会有空格:用加号的值 ...
- es6之let和const
在javascript中,我们都知道使用var来声明变量.javascript是函数级作用域,函数内可以访问函数外的变量,函数外不能访问函数内的变量. 函数级作用域会导致一些问题就是某些代码块内的变量 ...
- construction const parameter问题 构造函数const引用参数问题
工程在window下编译没有任何问题, 但是在linux(CentOS6)下编译就老是报错 C++ 编译器已升级到最新版 6.1.0 错误如下: In file included /bits/stl_ ...
- Error:const char* 类型的实参和LPCWSTR类型的形参不兼容的解决方法。
在C++的Windows 应用程序中经常碰到这种情况. 解决方法: 加入如下转换函数: LPCWSTR stringToLPCWSTR(std::string orig) { size_t origs ...
- C#基础知识七之const和readonly关键字
前言 不知道大家对const和readonly关键字两者的区别了解多少,如果你也不是很清楚的话,那就一起来探讨吧!探讨之前我们先来了解静态常量和动态常量. 静态常量 所谓静态常量就是在编译期间会对变量 ...
- const 与 readonly知多少
原文地址: http://www.cnblogs.com/royenhome/archive/2010/05/22/1741592.html 尽管你写了很多年的C#的代码,但是可能当别人问到你cons ...
随机推荐
- Oracle四舍五入,向上取整,向下取整
用oracle sql对数字进行操作: 取上取整.向下取整.保留N位小数.四舍五入.数字格式化 取整(向下取整): select floor(5.534) from dual; select trun ...
- 在CentOS7系统上安装MySQL数据库
1.下载安装MySQL官方repo文件 下载MySQL的官方repo文件 [root@centos7 ~]# wget -i -c http://dev.mysql.com/get/mysql57-c ...
- #leetcode刷题之路1-两数之和
给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符.返回被除数 dividend 除以除数 divisor 得到的商. 示例 1:输入: ...
- Percona-Tookit工具包之pt-kill
Preface Sometimes,we are determined to kill some MySQL connections which are occupying huge ...
- eventlet详解
正真工作才发现很懒,没这么多时间写文,毕竟小白,参照大神写的,不喜勿喷 1.eventlet是什么eventlet - 具有WSGI支持的异步框架eventlet是python库函数,一个是处理和网络 ...
- Ubuntu 16.04 Server 版安装过程图文详解
进入系统安装的第一个界面,开始系统的安装操作.每一步的操作,左下角都会提示操作方式!! 1.选择系统语言-English 2.选择操作-Install Ubuntu Server 3.选择安装过程和系 ...
- Co. - Microsoft - Windows - 通过任务计划,备份本地MySQL,数据上传Linux备份服务器
需求 客户为Windows系统,安装MySQL,需要每日备份数据库到指定目录,并且上传到公司的备份服务器(Linux). 1.使用mysqldump备份MySQL数据库,使用FTP上传到阿里云Linu ...
- web pack
WebPack是模块捆绑器,如果你的代码跨越了不同模块(例如不同Javascript文件),web pack可以将这些零散的代码构建到浏览器可读单个文件中. web pack还可以作为构建通道,你可以 ...
- 【坑】记录一个docker 1.13.1 build 07f3374 版本的坑
在自家的开发环境中,一般都是直接yum安装最新的docker来做镜像和容器,没有仔细深究,一直相安无事.但这几天却发现一个惊悚的现象,新申请的两台虚机,一台安装好后正常,另一台却出现异常: docke ...
- tp3.2报错;syntax error, unexpected 'function' (T_FUNCTION), expecting identifier (T_STRING) or \\ (T_NS_SEPARATOR)
出错原因:这个是php版本问题,laravel5.1的php版本要求是PHP >= 5.5.9,切换一下PHP版本就行.