我只要一听到被面试者说:"const意味着常数"(不是常数,可以是变量,只是你不能修改它),我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embedded Systems  Programming)的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着"只读"就可以了。尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。(如果你想知道更详细的答案,仔细读一下Saks的文章吧。)
如果应试者能正确回答这个问题,我将问他一个附加的问题:下面的声明都是什么意思?
Const只是一个修饰符,不管怎么样a仍然是一个int型的变量
const int a;
int const a;
const int *a;
int * const a;
int const * a const;
本质:const在谁后面谁就不可修改,const在最前面则将其后移一位即可,二者等效
 
前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,指向的整型数是不可修改的,但指针可以,此最常见于函数的参数,当你只引用传进来指针所指向的值时应该加上const修饰符,程序中修改编译就不通过,可以减少程序的bug)。
 
第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。
 
如果应试者能正确回答这些问题,那么他就给我留下了一个好印象。顺带提一句,也许你可能会问,即使不用关键字 ,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?我也如下的几下理由:
1) 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)
2) 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。
3) 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。
 
const关键字至少有下列n个作用:
(1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;
(2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;
(3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;
(4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量;
(5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。例如:
const classA operator*(const classA& a1,const classA& a2);
  operator*的返回结果必须是一个const对象。如果不是,这样的变态代码也不会编译出错:
classA a, b, c;
(a * b) = c; // 对a*b的结果赋值
  操作(a * b) = c显然不符合编程者的初衷,也没有任何意义。

const的意义及作用相关推荐

  1. python的用途实例-python中pass语句意义与作用(实例分析)

    想必大家都是刚刚才开始接触python这门语言的,今天这篇文章就来带大家来了解一下python这门语言之中常常会用到的一个语句pass语句.想必大家都很好奇python中pass作用是什么,接下来我就 ...

  2. 关键字static、const、volatile的作用

    关键字static的作用是什么?这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1.在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 2. 在模 ...

  3. 【OS学习笔记】十七 保护模式五:保护模式下如何进行内存保护 与 别名段的意义与作用

    上一篇文章学习了如何进入保护模式,以及如何在保护模式下进行内存访问.点击链接查看上一篇文章:进入保护模式与在保护模式下访问内存 首先说明本片文章有对应的汇编代码,点击链接查看:点击查看 本篇文章接着学 ...

  4. 试述hadoop生态系统以及每个部分的具体功能_Hadoop在大数据分析中的意义和作用...

    什么是Hadoop? Apache Hadoop是一个开放源代码软件框架,用于开发在分布式计算环境中执行的数据处理应用程序. 使用HADOOP构建的应用程序可在分布在商用计算机群集上的大型数据集上运行 ...

  5. 数据中台对企业意义和作用有哪些

    随着数据浪潮席卷全球,数数据中台应运而生.众所周知,数据中台的主要功能是统一标准和口径后对数据进行存储和处理,使企业能够提供更高效的服务.总之,数据中台的目标是节约企业成本,实现精细化运营.那么数据中 ...

  6. 泛型的意义和作用是啥?

    简单的说,意义和作用有: 类型的参数化,就是可以把类型像方法的参数那样传递.这一点意义非凡. 泛型使编译器可以在编译期间对类型进行检查以提高类型安全,减少运行时由于对象类型不匹配引发的异常. 泛型方法 ...

  7. 数据分析的目的和意义(作用)是什么?

    很多人会问数据分析目的是什么?它有什么作用?让我们看看亿信华辰如何看待数据分析的目的和意义.仅仅谈论数据分析的作用实际上并不重要,因此在谈论该作用之前,我们首先要考虑受众,打个比方:对于个人而言,由于 ...

  8. 校园服务器系统的意义,浅谈校园网络建设的意义与作用.doc

    PAGE PAGE 7 浅谈校园网络建设的意义和作用 摘要:本文围绕校园网建设的意义和作用.结合本校校园网建设的基本经验,运用大量具体实例阐述大力建设校园网络的必要性和可行性,供大家借鉴. 关键字:校 ...

  9. 身份证实名认证API接口有什么意义与作用?

    身份证实名认证API接口有什么意义? 中国公民的身份证是一种对外证明自己身份的有效证件,随着国家对实名制要求的落实,工作与生活中许多场景都会需要进行身份验证.比如出门外出乘座火车与飞机时.注册互联网络 ...

  10. 什么是叫委托,委托的意义和作用

     Public Class Class1 '什么是叫委托,委托的意义和作用. '委托概念的产生原因是因为分别出现了代码的设计者和使用者的关系. '因为这种设计者与使用者的关系的原因,就出现了代码的 ...

最新文章

  1. Linux学习---Day02
  2. [YTU]_2446( C++习题 输入输出--私有继承)
  3. 学而思的python课怎么样_有在用学而思网校的同学觉得孙墨漪老师怎么样?报她的课值得吗?...
  4. dmalloc用法快速入门
  5. U盘的RUNAUTO..文件的删除
  6. 【Python】二维数据格式化
  7. 使用Picker的时候,让input输入框使用焦点,手机键盘不弹出
  8. 基于Windows下处理Java错误:编码GBK的不可映射字符的解决方案
  9. STL--deque用法
  10. Asp.Net MVC 模型(使用Entity Framework创建模型类)1
  11. protocol buffer安装及使用(非常详细)
  12. iperf简介与下载安装
  13. 爬虫--07:MongoDB
  14. Power BI中突出显示矩阵的最大值与最小值
  15. Flutter高德地图系列——开篇
  16. WSL2 Ubuntu18.04 apt-get update失败
  17. 招商银行证书到期后不同机器恢复导致的问题——“用户密码、证件号码和证书错误#3”
  18. sqlserver字符串转日期
  19. SSM6==spring体系回顾,纯XML配置springMVC,纯注解配置springMVC
  20. Homebrew error: Another active Homebrew process is already in progress

热门文章

  1. 如何通过自我介绍打动面试官?
  2. 奶酪和奶酪碎的区别_与奶酪三星银河芽战斗大逃杀直播vs airpods
  3. CF赛后总结3:2021-07-22晚 HSSC21-22 div1+2 rating+219
  4. CentOS 7 虚拟机网卡失效问题:ens33:<NO-CARRIER,BROADCAST,MULTICAST,UP>mtu 1508 gdisc pf ifo_fast state DOWN
  5. 170816 Ubuntu-Nvidia CUDA+Driver+cuDNN installation-Titan Xp
  6. win7设置无线wifi连接到服务器,自动连接wifi怎么设置_如何设置无线网自动连接...
  7. Kali linux 学习笔记(二)环境优化(网络配置、软件安装、显卡优化、线程限制、电源优化) 2020.2.12
  8. 记录一次在线网页加密PDF解密过程
  9. 【学习笔记】神经内科常用量表总结(文后有下载链接)
  10. 阿里云跨账号迁移云服务器实例