const关键字,相信对C语言有所了解的同学都应该知道他的作用:1.修饰常量,2.修饰指针,3.修饰函数

1.修饰常量

const修饰后的变量被定义为常量

2.修饰指针

当用const修饰指针的时候,你可以用const关键字 标明 指针所指内容或者真正本身是常量! 这里有点绕,就用经典的例子举例吧!

char greeting[] = "hello";

char*p = greeting;

const char* p = greeting;  //表示指向是常量

char* const p = greeting; // 指针自身是常量。

const char* const p = greeting;

这里有一个规则可以遵循,const 在*的右边表示 指针是常量, 在*左边表示指针所指物是常量,

当然还有种写法是:

const char *   与  char const *  的写法是完全一样的含义。

3.修饰函数

3.1 修饰函数的返回值

  当const修饰函数的返回值时,表明此函数返回的内容 是不可修改的!

  这是一个非常好的习惯或者是行为,可以降低使用者使用返回值错误导致的意外(安全性)。

  另外如果是const 指针的话效率也比较高,比如返回值是一个对象,此处将不进行副本操作,避免了对象的副本拷贝构造,且外部不能修改次对象内容!

3.2 修饰函数参数

  const 修饰参数时,首先表面参数是只读内容!

  涉及到了值传递和引用传递的概念,同样是一个效率问题,当应用传递+const修饰,弥补了安全性的缺陷!

3.3 修饰函数本身

  const成员函数 代表着其不可以更改对象内任何non-static成员变量!   当然可以修改static成员变量--注意!!

  冷门关键字:mutable!!  mutable 修饰的成员变量,可以被const成员函数修改!!!!!

  const 成员函数与非const成员函数之间相互调用一定要慎重!!!

C++ 之 const 随笔记的更多相关文章

  1. const读书笔记

    Const 的使用读书笔记 Const的主要主要用法有: 常变量: const 类型说明符 变量名 常引用: const 类型说明符 &引用名  常对象: 类名 const 对象名 常成员函数 ...

  2. const 学习笔记

    #include<stdlib.h> #include<iostream> using namespace std; int main(){ // const 仅仅起到是否为常 ...

  3. 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 ...

  4. 读书笔记:const和readonly、static readonly 那些事

    C#中表示不变的量(常量)的两种形式:const 和readonly const 是静态常量 readonly 是动态常量 严格的来讲:const 应该称为常量 而readonly 则应称为只读变量. ...

  5. 《OOC》笔记(1)——C语言const、static和extern的用法

    <OOC>笔记(1)——C语言const.static和extern的用法 C语言中const关键字用法不少,我只喜欢两种用法.一是用于修饰函数形参,二是用于修饰全局变量和局部变量. 用c ...

  6. es6学习笔记--let和const

    今天学习了es6中的let和const命令,借此整理一下笔记. let : let 和 var 的声明方式一样,但有 var 比不上的优点.下面用 var 和 let 的例子来加深对 let 的理解. ...

  7. C++笔记019:C++中的const修饰的是一个真正的常量

    原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 程序一: 我们知道数组的下标不能为变量,必须是一个确定的值.在C语言中看程序: #define a 10 int main() { //第 ...

  8. ES6学习笔记<一> let const class extends super

    学习参考地址1  学习参考地址2 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015:也 ...

  9. C++笔记020:const 和 #define 的对比

      原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 第一,const与#define的相同点 C++中的const常量类似于宏定义 const  int  c = 5  ≍  #defi ...

随机推荐

  1. ajax获取其他网站接口信息

    MXS&Vincene  ─╄OvЁ  &0000023─╄OvЁ  MXS&Vincene MXS&Vincene  ─╄OvЁ:今天很残酷,明天更残酷,后天很美好, ...

  2. ASP.NET下载远程图片保存到本地的方法、保存抓取远程图片

    以下介绍两种方法:1.利用WebRequest,WebResponse 类 WebRequest wreq=WebRequest.Create("http://www.xueit.com/e ...

  3. ifconfig

    虚拟机启动后发现ifconfig命令下,没有打印ip .用ifconfig eth0 up命令开启下网卡. #ifconfig eth0 up .更改eth0配置: #vi/etc/sysconfig ...

  4. 模块(序列化(json&pickle)+XML+requests)

    一.序列化模块 Python中用于序列化的两个模块: json     跨平台跨语言的数据传输格式,用于[字符串]和 [python基本数据类型] 间进行转换 pickle   python内置的数据 ...

  5. linux centos 6.5 运行MySQL Workbench 6.0找不到 libmysqlclient.so.16和libmysqlclient_r.so.16

    找到已安装mysql/lib目录下有类似文件: -rw-r--r-- root root 12月 : libmysqlclient.a lrwxrwxrwx root root 12月 : libmy ...

  6. 解决安装完centos6.6之后/etc/sysconfig/目录下没有iptables 的问题

    我在安装完成centos6.6之后对防火墙进行配置,但是发现在/etc/sysconfig目录下没有iptables,心里犯嘀咕,随后就写了一条命令,保存下试试,谁知道成功了! 如图 没有发现ipta ...

  7. 史上最"恐怖"的12生肖图,绝对超猛

    史上最“恐怖”的十二生肖图,绝对超猛!图片依次是:鼠 牛 虎 兔 龙 蛇 马 羊 猴 鸡 狗 猪!

  8. winform开发框架之模块维护

    前言:模块维护试图解决的问题, 模块加载只用MEF的方式: MEF(Managed Extensibility Framework)是一个用于创建可扩展的轻型应用程序的库. 应用程序开发人员可利用该库 ...

  9. InfoObject共享

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  10. LTE Module User Documentation(翻译14)——Uplink Power Control(上行功率控制)

    LTE用户文档 (如有不当的地方,欢迎指正!) 20 Uplink Power Control(上行功率控制)   上行功率控制功能默认是开启的.用户可以通过设置布尔属性 ns3::LteUePhy: ...