C++:22 再议const的作用(上)

我在C++:18篇里说过const的用法,这里我有必要再提升进阶下const的理解。

因为你可能只知道他是怎么用的,但是他为什么这样用,其他用法呢?

首先回顾下const有什么主要的作用?

(1)可以定义const常量,具有不可变性。

(2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。

(3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。同宏定义一样,可以做到不变则已,一变都变

(4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。

(5) 为函数重载提供了一个参考。

(6) 可以节省空间,避免不必要的内存分配。例如:

#define PI 3.14159 //常量宏

const doulbe Pi=3.14159; //此时并未将Pi放入ROM中 ......

double i=Pi; //此时为Pi分配内存,以后不再分配!

double I=PI; //编译期间进行宏替换,分配内存

double j=Pi; //没有内存分配

double J=PI; //再进行宏替换,又一次分配内存!

const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444444.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode57. 插入区间

给出一个无重叠的 ,按照区间起始端点排序的区间列表。 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。 示例 1: 输入: intervals [[1,3],[6,9]], newInterval …

C:03---运算符优先级

二话不说先看运算符的优先级表: 一、逗号运算符 格式:整个逗号表达式的值返回的结果是最后一个表达式的值使用起来,最好加上括号来返回最后一个表达式的值。否则逗号表达式的意义将失效(见下面演示案例)(表达式1, 表达式2, 表达式3....); #include <stdio.h> int ma…

C++: 21---引用和指针

一般说到谁和谁怎么样,要么说两者的相似点,要么两者的区别,这里我们也要说二者的区别和联系,同时,也不仅仅是区别和联系这么简单,因为你可能会发现在变量赋值,函数传参这两点还是有很多值得品一品的。 最直观的赋值方面的区别 首先我们先说二者的区别和联系。 (1)指针…

Oracle数据库Date类型查询问题(

浅谈Oracle数据库Date类型查询问题用过Oracle数据库的朋友应该知道&#xff0c;Oracle数据库在以Date类型为查询条件时存在一个小小的BUG&#xff0c;如&#xff1a;select * from tableName where createDate > to_date(2007-01-01,yyyy-mm-dd) and createDate < to_dat…

(二十二)深入浅出TCPIP之实战篇—用c++开发一个http服务器

在当前的网络编程专栏前十几篇文章里&#xff0c;我已经说明了TCPIP常用的一些原理&#xff0c;那么接下来我将逐步进入到实战编程阶段&#xff1a;本篇文章我将带大家用C做一个http服务器。既然想实现一个http服务器&#xff0c;首先必须要熟悉的就是http协议知识&#xff0c;…

C++:19---重载与模板、模板特例化

一、重载与模板 函数模板可以被另一个模板或一个普通非模板函数重载如果涉及函数模板,则函数匹配规则会有以下的约束:如果同样好的函数中只有一个是非模板函数,则选择此函数如果同样好的函数中没有非模板函数,而有多个函数模板,则其中一个模板比其他模板更特例化,则选择此…

leetcode159. 至多包含两个不同字符的最长子串

给定一个字符串 s &#xff0c;找出 至多 包含两个不同字符的最长子串 t 。 示例 1: 输入: "eceba" 输出: 3 解释: t 是 "ece"&#xff0c;长度为3。 示例 2: 输入: "ccaabbb" 输出: 5 解释: t 是 "aabbb"&#xff0c;长度为5。 思…

C++:17---函数指针

一、格式 指针名前*号,并且将*和指针名用括号括起来例如: //指针名为pf,指向一个返回值为bool,参数为两个const string&的函数 bool (*pf)(const string&, const string&); //这个不是函数指针,而是一个返回值为bool*的pf函数 bool *pf(const string&, co…

leetcode161. 相隔为 1 的编辑距离

给定两个字符串 s 和 t&#xff0c;判断他们的编辑距离是否为 1。 注意&#xff1a; 满足编辑距离等于 1 有三种可能的情形&#xff1a; 往 s 中插入一个字符得到 t 从 s 中删除一个字符得到 t 在 s 中替换一个字符得到 t 示例 1&#xff1a; 输入: s "ab", t …

C语言-- 大端小端详解

一、什么是大端和小端 所谓的大端模式,就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。 所谓的小端模式,就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。 简单来说:大端——高尾端,小端——低尾端 举个例子,比如数字 0x12 34 56 78…

leetcode164. 最大间距 借桶思想秒掉hard题

给定一个无序的数组&#xff0c;找出数组在排序之后&#xff0c;相邻元素之间最大的差值。 如果数组元素个数小于 2&#xff0c;则返回 0。 示例 1: 输入: [3,6,9,1] 输出: 3 解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。 示例 2: …

C++:18---函数模板(template)

一、模板的定义 template<typename T>以关键字template开头,后面跟一个模板参数列表,列表里面用逗号将多个模板参数隔开定义的注意事项模板的编译 当编译器遇到一个模板定义时,并不生成代码。只有当实例化处模板的一个特定版本时,编译器才会生成代码重点:通常,当我…

leetcode167. 两数之和 II - 并没有那么easy的easy题

给定一个已按照升序排列 的有序数组&#xff0c;找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2&#xff0c;其中 index1 必须小于 index2。 说明: 返回的下标值&#xff08;index1 和 index2&#xff09;不是从零开始的。 你可以假设每…

C++:21---仿函数

什么是仿函数 所谓的仿函数(functor),是通过重载()运算符模拟函数形为的类。 因此,这里需要明确两点: 1 仿函数不是函数,它是个类; 2 仿函数重载了()运算符,使得它的对你可以像函数那样子调用(代码的形式好像是在调用函数)。 假设有一个vector<string>,你的任务…

C++:20---类模板(template)

一、类模板与模板类 类模板:一个模板(是模板)模板类:调用类模板生成的类对象(是类实体),也称为类模板的实例化类模板的定义: 与函数模板的定义是一样的template <typename T> class Blob { public: Blob(); Blob(std::initializer_list<T> i); };模板类的使…

leetcode340. 至多包含 K 个不同字符的最长子串

给定一个字符串 s &#xff0c;找出 至多 包含 k 个不同字符的最长子串 T。 示例 1: 输入: s "eceba", k 2 输出: 3 解释: 则 T 为 "ece"&#xff0c;所以长度为 3。 示例 2: 输入: s "aa", k 1 输出: 2 解释: 则 T 为 "aa"&am…

Redis线上救命丸:01---误操作AOF、RDB恢复数据

Redis的flushall/flushdb命令可以做数据清除&#xff0c;对于Redis的开发和运维人员有一定帮助&#xff0c;然而一旦误操作&#xff0c;它的破坏性也是很明显的。怎么才能快速恢复数据&#xff0c;让损失达到最小呢&#xff1f;本文我们将结合之前学习的Redis相关知识进行分析&…

Log4j使用总结

一、介绍Log4j是Apache的一个开放源代码项目&#xff0c;通过使用Log4j&#xff0c;我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、UNIX Syslog守护进程等&#xff1b;我们也可以控制每一条日志的输出格式&#xff1b;通过定…

C语言: GDB调试技术(一)

启动GDB的方法有以下几种: 1、gdb <program> program也就是你的执行文件,一般在当然目录下。’ 例如我写了一个简单的helloword程序 #include <stdio.h> int main(){int a = 1;char* ch = "hello world";printf("%s\n",ch);return 0; }那么我…

C语言: ---windows下VS Debug调试

首先我先列出来常用的一些命令或者键盘控制: F5 开始调试,执行到断点 Shift + F5 停止调试 F9 在光标所在行添加断点 Shift + F9 QuickWatch Shift Ctrl F9 delete all 断点 F10 单步执行 F11 进入调用的函数 Shift F11 跳出这次调用的函数 另外还可以用Disable all breakpoi…