C++ Const 使用总结,代码实例亲测
1. 修饰普通变量
修饰变量语法 const TYPE value <==> TYPE const value 两者等价, 变量不可修改,无需说明。
2. 修饰指针
首先看下面一段 代码 , 输出结果为a1: 1 a2: 2 b1: 10 没有错误。
int a = 1;
int b = 10;
cout << "a1: " << a << endl;
int * p = &a ;
(*p)++;
cout << "a2: " << a << endl;
p = &b;
cout << "b1: " << b << endl;
加一个const后, 红字部分出现编译错误,说明此时(*p)是const的,指针指向的内容不能修改
int a = 1;
int b = 10;
cout << "a1: " << a << endl;
const int * p = &a ;
(*p)++;
cout << "a2: " << a << endl;
p = &b;
cout << "b1: " << b << endl;
将const换一个地方,红字部分出现编译错误,说明此时指针p是const的,指针本身不能再修改,不能指向其他地方。
int a = 1;
int b = 10;
cout << "a1: " << a << endl;
int *const p = &a ;
(*p)++;
cout << "a2: " << a << endl;
p = &b;
cout << "b1: " << b << endl;
3. 修饰函数形参
例: int fun(int const a) 说明形参a 在函数体内不能变化。 参数的形式各异,可以是变量,指针,引用等。
4. 修饰类对象 类成员
首先如下代码:
class A
{
public:
A(){ num = 1;}
int num;
void fun1()
{
num++;
cout << "fun1_num: " << num << endl;
}
void fun2()
{
num++;
cout << "fun2_num: " << num << endl;
} }; int main ()
{
A a;
a.fun1();
a.fun2();
return 0;
}
a. 如果用const 修饰对象,将21行改为 const A a; 那么22 23行将会报错,因为const修饰对象时,任何非const的方法都不能调用,因为此方法有修改成员变量的意图,应该改为void fun1() const 和 void fun2() const,并将num++去掉。
b. 如果用const修饰类的方法,如a中的void fun1() const 表示该方法不会修改类成员变量,所以num++不能加进去。
c. 修饰成员变量,如果上面的num为 const int num,那么这只能在初始化列表中初始化
A():num(1){},不能在构造函数中初始化。
C++ Const 使用总结,代码实例亲测的更多相关文章
- Cocos Creator JS web平台复制粘贴代码(亲测可用)
Cocos Creator JS web平台复制粘贴代码(亲测可用) 1 webCopyString: function(str){ var input = str; const el = docum ...
- IE兼容问题,各类css hack代码(亲测有效)
现在大部分企业对浏览器兼容要求是IE7+或者IE8+,要求IE6的很少,此处一并写出. IE6: _margin-top: 20px; IE6+IE7: *margin-top: 20px; +mar ...
- [PHP+JS]微信卡券(潦草笔记,全代码,亲测通过)
群发卡券可以通过客服消息推送 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140547 后端代码: define('A ...
- vue加百度统计代码(亲测有效)
申请百度统计后,会得到一段JS代码,需要插入到每个网页中去,在Vue.js项目首先想到的可能就是,把统计代码插入到index.html入口文件中,这样就全局插入,每个页面就都有了;这样做就涉及到一个问 ...
- 微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
目录 0.概述websocket 1.app.js写法 2.后台写法 0.概述websocket (1) 个人总结:后台设置了websocket地址,服务器开启后等待有人去连接它. 一个客户端一打开就 ...
- 6个美观的纯CSS渐变背景代码分享(亲测有效)
样式1 background-image: linear-gradient(160deg, #b100ff 20%,#00b3ff 80%); 样式2 background-image: linear ...
- PHP抽奖代码。亲测可用
$prize_arr = array( '0' => array('id' => 1, 'title' => 'iphone5s', 'v' => 5), '1' => ...
- linux 系统下开机自动启动oracle 监听和实例 (亲测有效)
[oracle@oracle11g ~]$ dbstartORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listene ...
- 亲测可用!!!golang如何在idea中保存时自动进行代码格式化
亲测可用,golang在idea中的代码自动格式化 1.ctrl+alt+s打开设置界面,选择[Plugins] -> [Install JetBrains plugin...] -> 搜 ...
随机推荐
- Ubuntu 16.04主题美化和软件推荐
http://www.linuxidc.com/Linux/2016-09/135165.htm http://www.techweb.com.cn/network/system/2015-11-20 ...
- Arcgis:坐标系统极其转换
1. ArcGIS中的坐标系统 ArcGIS中预定义了两套坐标系统,地理坐标系(Geographic coordinate system)和投影坐标系(Projectedcoordinate syst ...
- Data Guard配置
>> from zhuhaiqing.info 确认主库处于归档模式下 SQL>archive log list; Database log mode Archive Mode Au ...
- android开发系列之aidl
aidl在android开发中的主要作用就是跨进程通讯来着,说到进程相比很多人都是非常熟悉了,但是为什么会有跨进程通讯这个概念呢?原来在android系统中,有这么一套安全机制,为了各个Apk数据的独 ...
- 【Mac系统 + Python + Django】之开发一个发布会系统【Django视图(二)】
此学习资料是通过虫师的python接口自动化出的书学习而来的,在此说明一下,想学习更多的自动化的同学可以找虫师的博客园,非广告,因为我python+selenium自动化也是跟虫师学的,学习效果很好的 ...
- java学习笔记之String.Split方法
hello 大家好,好久不见,今天 我们要讨论的是java的split方法,或许你很早就知道了,但你真的知道吗? 我们来看看吧. 首先我们来看看我们最常用的split()方法也就是单个参数的方法 pu ...
- VC++ 读写注冊表,注冊文件图标关联
#include <string> #include <iostream> #include <Windows.h> #include <shlobj.h&g ...
- CAFFE学习笔记(四)将自己的jpg数据转成lmdb格式
1 引言 1-1 以example_mnist为例,如何加载属于自己的测试集? 首先抛出一个问题:在example_mnist这个例子中,测试集是人家给好了的.那么如果我们想自己试着手写几个数字然后验 ...
- 九度OJ 1342:寻找最长合法括号序列II (DP)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:898 解决:366 题目描述: 假如给你一个由'('和')'组成的一个随机的括号序列,当然,这个括号序列肯定不能保证是左右括号匹配的,所以给 ...
- 移动端meta viewport
<meta name="viewport" content=" width=device-width, user-scalable=no, initial-scal ...