最近发现自己对const这一块其实不甚熟悉,所以复习一下const的相关知识点。

基本用法

const int bufSize = 512;

上面这样就可以将bufSize定义为常量,编译的时候编译器会把用到该变量的地方都替换成对应的值。在代码运行过程中无法为常量另外赋值:

bufSize = 1024;

注意,一定要给定一个值来初始化常量,初始值可以是表达式:

const int j = get_size();

const只限定不能执行会更改到内容的操作,其他的操作例如将const变量的值复制给另一个变量是可以的。

int i;
i = bufSize;

作用范围

定义好的const变量只有在当前文件下才能被访问到,所以在多个文件中定义了同名的const变量的时候其实就等同于在不同文件中分别定义了独立的变量。如果想要在不同文件中共享一个初始值不是常量表达式的常量,那么就要在定义以及其他文件的声明中加上extern

// file1.cpp
extern const int bufSize = fcn(); // file2.cpp
extern const int bufSize;

左定值,右定向

const int *p = 8;

上面这样写就是让const修饰指针指向的内容,内容必须是常量。

int a = 8;
int* const p = &a;
*p = 9; // 可以更改指向对象的值
int b = 7;
p = &b; // 不能够更改指向方向

上面这样则是指针为常量,但是指针指向的内容可以变。其实const只是限定了权限,只限定自己修饰的那部分不能够被改变值。

还有同时修饰指针和指针指向的内容的情况:

int a = 8;
const int *const p = &a;

修饰成员函数

#include<iostream>

using namespace std;

class Test
{
public:
Test(){}
Test(int _m):_cm(_m){}
int get_cm()const
{
return _cm;
} private:
int _cm;
}; void Cmf(const Test& _tt)
{
cout<<_tt.get_cm();
} int main(void)
{
Test t(8);
Cmf(t);
system("pause");
return 0;
}

这样写get_cm就不允许修改成员变量。

参考

《C++ Primer 第5版》:看就是了,别废话

C++ const 关键字小结

最新文章

  1. HTML、CSS、JS在前端开发中都扮演怎样的角色
  2. c++ 符号执行顺序小例子
  3. Identity标识列
  4. MySQL中EXPLAIN的解释
  5. [C#]動態叫用Web Service
  6. 【转载】一致性hash算法释义
  7. windows下的unix工具集:UnxUtils
  8. spring配置中,properties文件以及xml文件配置问题
  9. linux查看tomcat版本
  10. [转载] FFMpeg的码率控制
  11. 微信JS-SDK实际分享功能
  12. JavaScript设计模式之单例模式
  13. libevent evbuffer bug
  14. 使用html,JavaScript,ajax写一个小型实例
  15. C++ 头文件系列(streambuf)
  16. 动态游标(例如表名作为参数)以及动态SQL分析
  17. 计蒜客 2019 蓝桥杯省赛 B 组模拟赛(一)
  18. Oracle 数据库实例简介
  19. python全栈开发day73-Django认证系统
  20. 基于CentOS搭建个人Leanote云笔记本

热门文章

  1. 微信小程序 canIUse
  2. ES6学习笔记(对象新增方法)
  3. 轮子:读取config.ini文件
  4. 初识容器和Docker
  5. centos 中 redis 的安装
  6. stack和queue小讲
  7. CTS2019&amp;APIO2019爆炸记
  8. JavaWeb-SpringBoot_使用MySQL数据库实现用户管理_demo
  9. scala实战学习-快速排序
  10. 关于varchar的总结