一、const变量

const在*前常量后指针:看*前面是什么类型就修饰什么,如int const x则修饰int变量,如int *const y则修饰int *指针

const在*前(左),修饰指针指向的变量,变量值不可更改,即常量值;

const在*后(右),修饰指针本身,指针不可更改。即常地址

int a = 1;

int b = 2;

  1. const int *p = &a;

  1. int const *p = &a;

  1. int *const p = &a;

  1. const int* const p = &a;

  1. int const* const p = &a;

  1. 示例:

int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[],

const int srcStride[], int srcSliceY, int srcSliceH,

uint8_t *const dst[], const int dstStride[]);

const uint8_t *const srcSlice[] == uint8_t const *const srcSlice[] == const uint8_t *const *srcSlice

如有变量:uint8_t *data[AV_NUM_DATA_POINTERS];

传参转换:(const uint8_t *const *)data //或 (uint8_t const *const *)data

  1. const int *p = &a;

p = &b;

*p = 0; //错误

  1. int const *p = &a;

p = &b;

*p = 0; //错误

  1. int *const p = &a;

p = &b; //错误

*p = 0;

  1. const int* const p = &a;

p = &b; //错误

*p = 0; //错误

  1. int const* const p = &a;

p = &b; //错误

*p = 0; //错误

二、const函数:const返回值,参数,函数体

只读函数:在函数后加const,只有类的非静态成员函数后可以加const修饰,表示该类的this指针为const类型,不能改变类的成员变量的值,任何改变成员变量的行为均为非法。

说明:类中const(函数后面加)与static不能同时修饰成员函数,原因有以下两点

C++函数前后加const的区别_函数前加const_Gorgeous_mj的博客-CSDN博客

  ①C++编译器在实现const的成员函数时,为了确保该函数不能修改类的实例状态,会在函数中添加一个隐式的参数const this*。但当一个成员为static的时候,该函数是没有this指针的,也就是说此时const的用法和static是冲突的;

  ②两者的语意是矛盾的。static的作用是表示该函数只作用在类型的静态变量上,与类的实例没有关系;而const的作用是确保函数不能修改类的实例的状态,与类型的静态变量没有关系,因此不能同时用它们。

  1. const int* A::getCount() //防止返回值被修改

{ return &count; }

  1. int A::getCount(const int& c) //防止参数被修改

{ return count; }

  1. int A::getCount() const//不能修改成员变量(除非是mutable变量),不能调用非const成员函数

{ return count; }

三、const对象

cosnt对象,即常量对象,只能访问const函数,不能调用非const函数

C与C++:const在*和函数体前后的区别相关推荐

  1. C# 总结const、 readonly、 static三者区别:

    总结const. readonly. static三者区别: (有人问我,看似简单,我也没能立刻回答出来,总结一下,分享一下.) const:静态常量,也称编译时常量(compile-time con ...

  2. JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别

    JavaScript:学习笔记(7)--VAR.LET.CONST三种变量声明的区别 ES2015(ES6)带来了许多闪亮的新功能,自2017年以来,许多JavaScript开发人员已经熟悉并开始使用 ...

  3. final关键字_Dart核心语言基础const关键字与final关键字的区别

    题记:不到最后时刻,千万别轻言放弃,无论结局成功与否,只要你拼搏过,尽力过,一切问心无愧 本文描述 Dart 中 const 关键字与 final 关键字的基本使用知识点以及对比区别. Dart核心基 ...

  4. js中const,var,let的区别

    1.const 定义的变量不可以被修改,而且必须初始化. const b = 2;//正确// const b;//错误,必须初始化 console.log('函数外const定义b:' + b);/ ...

  5. dim private public static_PHP中const,static,public,private,protected的区别

    const: 定义常量,一般定义后不可改变 static: 静态,类名可以访问 public: 表示全局,类内部外部子类都可以访问: private: 表示私有的,只有本类内部可以使用: protec ...

  6. Dart核心语言基础const关键字与final关键字的区别

    题记:不到最后时刻,千万别轻言放弃,无论结局成功与否,只要你拼博过,尽力过,一切问心无愧 本文描述 Dart 中 const 关键字与 final 关键字的基本使用知识点以及对比区别 ** 你可能需要 ...

  7. const与#define宏定义的区别——C语言深度剖析

    const定义的只读变量在程序运行过程中只有一份拷贝(因为它是全局的只读变量,存放在静态区),而#define定义的宏常量在内存中有若干个拷贝. #define宏是在预编译阶段进行替换,而const修 ...

  8. ES6——let、const和var的用法和区别

    ES6 新增了let命令,用来声明变量,新增了const命令,用来声明常量,它们的用法类似于var. let a = 1; var b = 2; const PI = 3.14; 主要区别 块级作用域 ...

  9. C# const与readonly的用法和区别解析(转)

    总结一下const和readonly: 1.const和readonly的值一旦初始化则都不再可以改写: 2.const只能在声明时初始化:readonly既可以在声明时初始化也可以在构造器中初始化: ...

最新文章

  1. Android Training - 使用IntentService运行任务(Lesson 2 - 发送任务给IntentService)
  2. [initandlisten] connection refused because too many open connections: 819 of 819
  3. Spring注入的基本使用
  4. GoLang:你真的了解 HTTPS 吗?
  5. java流与文件——流
  6. 通知模式实现两个textField传值及模态视图——iOS开发
  7. JavaScript高级程序设计 DOM事件处理 读书笔记
  8. php案例之后台数据显示-- mysqli面向对象版(Object Oriented Programming = OOP)
  9. 亲身经历:如何判断一个字符在a/z之前?
  10. DB2 客户端下载地址
  11. 天思经理人ERP日化行业应用方案
  12. SAP CO生产订单的标准成本、计划成本、实际成本和目标成本
  13. 三维重建:几种坐标系的简介
  14. 软件测试的自我发展规划
  15. 1.莫尔斯编码和布莱叶盲文
  16. 编写Java程序,将文本文件(附件提供有example.txt)的内容以“行”为单位进行倒序排列,运行效果见下图所示。
  17. 有道云笔记学习Markdown命令
  18. Axure的下载和安装
  19. python研究背景和意义_开题报告1研究背景及意义
  20. sip uri 与sips uri 的区别

热门文章

  1. 隐私保护广告行业新生态
  2. 计算机学院自然语言处理专业,哈尔滨工业大学计算机学院-自然语言处理-课程总结...
  3. 高可用核心原理综述总结
  4. 【年度榜单】2020大数据产业趋势人物丨数据猿·金猿榜
  5. 2021-08-30 BTC策略分析,妍妹论币
  6. 在公司内网 ssh 公网服务器,经常断开 client_loop: send disconnect: Connection reset by peer
  7. python 货币格式_Python中的货币格式
  8. 如何将谷歌地图高清卫星影像坐标系转换成西安80坐标(WGS84)
  9. python 检测数据库是否可以正常连接
  10. linux 服务 ddns,Linux 环境下搭建DDNS